提供一个思路:
将输入的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';
方法比较笨,但是算是个思路吧。