【编程练习】校招真题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjx624bjh/article/details/81590698

(1)下厨房
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
输入描述:每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。
输出描述:输出一行一个数字表示完成所有料理需要多少种不同的材料。
示例1
输入:
BUTTER FLOUR
HONEY FLOUR EGG
输出:
4
思路:只要熟悉set容器,这道题其实很简单,不同的料理可能含有相同的材料,所以可以应用set容器以达到去重的效果。

代码:

#include<iostream>
#include<set>
#include<string>
using namespace std;
int main()
{
    string s;
    set<string> num;
    while(cin>>s)
    {
        num.insert(s);
    }
    cout<<num.size()<<endl;
}

(1)分苹果
题目描述:n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。
示例1
输入
4
7 15 9 5
输出
3

代码:

#include<iostream>
using namespace std;
int main()
{
    int sum = 0;
    int n,a[100];
    int apple = 0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        sum+=a[i];//算出总苹果数
    }
    if(0 != (sum%n))//如果苹果不能平分到每个奶牛,方案异常输出-1
    {
        cout<<-1<<endl;
        return 0;
    }
    apple = sum/n;
    int tmp = 0;
    for(int i = 0;i < n;i++)
    {
        if(abs((apple-a[i])%2!=0))//某只奶牛的苹果数与平均值差值不是2的倍数,方案异常输出-1
        {
            cout<<-1<<endl;
            return 0;
        }
        if(apple >= a[i])//否则加上差值即可
        {
            tmp = tmp+(apple-a[i])/2;
        }
    }
    cout<<tmp<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zjx624bjh/article/details/81590698