网易2016校招内推笔试编程题

1、下厨房

牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
输入描述:
每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。


输出描述:
输出一行一个数字表示完成所有料理需要多少种不同的材料。

输入例子:
BUTTER FLOUR
HONEY FLOUR EGG

输出例子:
4

读入所有材料,去掉其中重复的即可,可理解为容器的去重问题。stl中容器的排序也支持字符串排序,所以先将vector中的字符串排序,相同的材料名就变成相邻的,去重,容器剩下的大小即为所需不同材料数。
#include <iostream>
#include <deque>
#include <string>
#include <vector>
#include <algorithm>
#include <stdlib.h>
using namespace std;

int main()
{
    vector<string> mats;
    char tmp[50];
    while(scanf("%s",tmp)!=EOF)
    {
        mats.push_back(tmp);
    }
    sort(mats.begin(),mats.end());
    vector<string>::iterator i=mats.begin();
    for(i;i<mats.end()-1;i++)
    {
       
        if(*i==*(i+1))
        {
            mats.erase(i+1);i--;   //注意,一定要将i再减1,这样才能继续从该值往下比较
} } cout
<<mats.size()<<endl; return 0; }

2、分苹果

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


输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。

输入例子:
4
7 15 9 5

输出例子:
3


方案不存在有两种情况,一种是苹果总数无法平均,一种是因为每次只能移两个苹果而无法移出结果。所以,我们先算出平均每个奶牛能分到多少苹果。想要平分,一定是把多的奶牛的苹果移给少的,只需要算出多的奶牛要被移走多少次,才能达到平均数即可。
#include <iostream>
#include <deque>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    int n;
    cin>>n;
    vector<int> a;
    int sum=0;
    for(int i=0;i<n;i++)
    {
        int tmp=0;
        cin>>tmp;
        a.push_back(tmp);
        sum+=tmp;
    }
    int avg=sum/n;
    if(sum%n!=0)
        cout<<-1<<endl;
    else
    {
        int count=0;
        for(int i=0;i<n;i++)
        {
            if((a[i]-avg)%2!=0)
            {
                count=-1;
                break;
            }
            if(a[i]>avg)
            count+=(a[i]-avg)/2;
        }
        cout<<count<<endl;
    }    
    return 0;
}

 



posted @ 2016-08-16 10:30  翎飞蝶舞  阅读(1405)  评论(0编辑  收藏  举报