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 个整数 ai
(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; }
来源:https://www.cnblogs.com/luchenxu/p/5775414.html