题目
给定n个整数(0-100),其中0可以替换成任意其他数字,要求判断这n个整数是否连续?(存在重复数字也判定为连续)
例:
输入:0,5,6,7,8,10
解释:将0替换成9,这n个整数可判定为连续
输出:True
输入:5,6,7,9,8,10
解释:顺序无关
输出:True
输入:5,5,6,7,8
输出:True
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <iostream> #include <cstring>
int main(){ const int kMaxNum = 100; bool flag[kMaxNum]; memset(flag,0, sizeof(flag));
int num; int zero_num = 0; while(std::cin>>num) { if (!num) { ++zero_num; } else { flag[num - 1] = true; } if (std::cin.get() == '\n') break; } int32_t start = 0; int32_t end = 99; for (int i = 0; i < kMaxNum; i++) { if(flag[i]) { start = i; break; } } for (int i = kMaxNum - 1; i >=0; i--) { if(flag[i]) { end = i; break; } } for (int i = start; i <= end; ++i) { if(!flag[i] && (zero_num--)<0){ std::cout<<"False"<<std::endl; return 0; } } std::cout<<"True"<<std::endl; return 0; }
|
进阶
增加难度的额外需求:
若98,99,100,1,2,3,也当作连续数组,即最大数字100后接上最小数字1也计为连续,如何修改代码实现?
例:
输入:98,99,100,1,2,3
输出:True
输入:0,98,99,1,2,3
输出:True
写个思路吧。。
存数据的过程是一样的。。然后随便取一个 1 为起点,然后递增遍历 100 个,每次记录下一个 1 之间的 0 的个数,如果剩余 0 的个数足够填满这些个 1 ,就继续;不够的话,就记录目前 1 的位置,然后返回起点,递减按同样的方式处理,如果到了不够填满 0 的位置正好是上一次记录的,那么输出 true,否则输出 false