面试

牛牛有一个鱼缸。鱼缸里面已经有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;
}
原文地址:https://www.cnblogs.com/Czc963239044/p/7132220.html