提供一个思路:
将输入的mi转成字符串,取mi中最大的值,比如示例输入的6
000111 000000 000000 000000 000000
000001 000000 000000 000000 000000
000011 000001 000000 000000 000000
001111 000011 000001 000000 000000
111111 -> 001111 -> 000011 -> 000001 -> 000000
011111 000011 000001 000000 000000
000011 000001 000000 000000 000000
000001 000000 000000 000000 000000
001111 000001 000000 000000 000000
000011 000000 000000 000000 000000
第一次输入完后就是第一列的样式

string IntToString(int n, int max) { string str = ""; for (int i = 0; i < max - n; i++) { str += "0"; } for (int j = 0; j < n; j++) { str += "1"; } return str; }

int FindFirstOne(const string str) { int i = 0; for (; i < str.length(); i++) { if (str[i] == '1') break; } return i; }
FindFirstOne的返回值就是字符串中第一个为1的位置
最后根据FindFirstOne的返回值分别检查 str[i+1]、str[i-1]、下一行字符串str2[i]和上一行字符串str1[i]中的值是否为'0'
也就是分别判断上下左右是否为'0'
若为'0'则更新str[i] = '0';
方法比较笨,但是算是个思路吧。