牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证: 1、放进去的鱼是安全的,不会被其他鱼吃掉 2、这条鱼放进去也不能吃掉其他鱼 鱼缸里面已经存在的鱼已经相处了很久,不考虑他们互相捕食。现在知道新放入鱼的大小范围[minSize,maxSize](考虑鱼的大小都是整数表示),牛牛想知道有多少种大小的鱼可以放入这个鱼缸。 输入描述: 输入数据包括3行. 第一行为新放入鱼的尺寸范围minSize,maxSize(1 ≤ minSize,maxSize ≤ 1000),以空格分隔。 第二行为鱼缸里面已经有鱼的数量n(1 ≤ n ≤ 50) 第三行为已经有的鱼的大小fishSize[i](1 ≤ fishSize[i] ≤ 1000),以空格分隔。 #include<iostream> #include<cmath> using namespace std; int main(){ int minSize, maxSize, n, fishsize, count = 0; int size[1001] = { 0 }; cin >> minSize >> maxSize >> n; for (int i = 1; i <= n; i++){ cin >> fishsize; for (int j = 2 * fishsize; j <= maxSize && j <= 10 * fishsize; j++) size[j] = 1; for (int j = fishsize / 2; j >= minSize && j >= ceil(fishsize / 10.0); j--) size[j] = 1; } for (int i = minSize; i <= maxSize; i++) if (size[i] == 0) count++; cout << count; return 0; } 如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。 #include <string> #include <iostream> #include <vector> using namespace std; int main() { int n,num=0; vector<string> twords; vector<bool> checks;//判断是否已属于某种循环单词 cin>>n; for (int i = 0; i < n; i++) { string t_w; cin >> t_w; twords.push_back(t_w); checks.push_back(false); } for (int j = 0; j < n; j++) { if (!checks[j]){ string tt; tt = twords[j] + twords[j]; for (int k = j + 1; k < n; k++) { if (!checks[k]){ if (tt.find(twords[k]) != string::npos&&twords[k].length() == twords[j].length()){ checks[k] = true; } } } num++; } } cout << num << endl; return 0; } 牛牛的好朋友羊羊在纸上写了n+1个整数,羊羊接着抹除掉了一个整数,给牛牛猜他抹除掉的数字是什么。牛牛知道羊羊写的整数神排序之后是一串连续的正整数,牛牛现在要猜出所有可能是抹除掉的整数。例如: 10 7 12 8 11 那么抹除掉的整数只可能是9 5 6 7 8 那么抹除掉的整数可能是4也可能是9 两个相同的数异或为0,0和数a异或为a,将输入数组和min到max的数异或,如果缺失的数在min-max之间,则异或结果就是所求值,如果异或结果为0,则缺失的数为min-1或max+1,如果异或结果小于min或者大于max说明这个数组缺失不止一个数(可以用反证法)故输出mistake。 #include<iostream> using namespace std; int main() { int n; cin>>n; int min = 1000000001; int max = 0; int res = 0; int num = 0; for(int i = 0; i < n; i++) { cin>>num; if(num < min) min = num; if(num > max) max = num; res ^= num; } for(int i = min; i <= max; i++) { res ^= i; } if(res == 0) { if(min - 1> 0) cout<<min-1<<" "<<max+1; else cout<<max+1; } else if(res <= min || res >= max) { cout<<"mistake"<<endl; } else cout<<res; }