![]() |
#2
rohalloway2018-11-22 21:37
只有本站会员才能查看附件,请 登录 提供一个思路: 将输入的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'; 方法比较笨,但是算是个思路吧。 |
有一堵长度为n块砖的墙,现在要把墙拆掉,每次拆掉最外围的砖块(不太好描述,下面有样例解释),
问要拆几次才可以把墙拆掉?
输入格式:
第1行输入墙的长度n(1≤n≤10^5)
第2行输入n个数Mi,分别对应每个单位长度墙的高度(1≤Mi≤10^9)
输出格式:
输出次数m
输入样例:
10
3 1 2 4 6 5 2 1 4 2
输出样例:
4
样例解释:
见图:
第1次拆掉的打叉
第2次拆掉的打三角
第3次拆掉的打井号
第4次拆掉的打圈
总共需要4次
只有本站会员才能查看附件,请 登录