1.坑爹的宿舍
题目:在家里,从小娇生惯养的小明,从来都是想什么时候洗澡就什么时候洗澡。今年小明考上了某师范学院,住在宿舍413-602.每天洗澡的时候,总会感到很烦恼,因为宿舍只有一个洗澡房,只要有一个人在洗澡,其他人都要等待。今天小明就想,有什么方法可以使他们宿舍总等待时间最少。作为acm俱乐部的你能不能帮他解决这个问题。(洗了澡的宿友,就不需要算等待时间)
输入描述:输入的第一行为六个正整数,分别表示他们洗澡所需要的时间。
输出描述:对于每一组输入,输出他们总的等待时间和。
示例1
输入
1 2 3 4 5 6
3 1 1 3 1 1
输出
35
17
解题思路:只需要按顺序遍历数组,然后让当前数组元素的值乘以其余元素的数量(是当前元素的后面的元素的数量),然后全部加起来,就算出结果了。
#include<iostream> using namespace std; void bull_sort(int* N,int numsize) { for(int i = 0;i<numsize;i++) { for(int j = 1;j<numsize-i;j++) { if(N[j-1]<N[j]) { int temp = N[j-1]; N[j-1] = N[j]; N[j] = temp; } } } } int main() { int a, b, c, d, e, f; while (cin >>a>>b>>c>>d>>e>>f) { int N[6] = { 0 }; int count = 0; N[0] = a, N[1] = b, N[2] = c, N[3] = d, N[4] = e, N[5] = f; bull_sort(N, 6); for (int i = 0; i < 6; i++) { count += N[i] * (6 - i - 1); } cout << count << endl; } return 0; }
2.电梯的升降
题目:有一天,小明来到实验楼,看到保安在那里愁眉哭脸。小明好奇的走上去看了看,保安的手里有一份电梯升降任务表,由N个正整数组成,这些数字表示电梯按照给定的顺序停留的楼层号。电梯升一层花费5秒钟,降一层花费4秒钟,并且每次停留花费10秒钟。对于每一份任务表,你要计算出完成全部升降任务所花费的总时间。一开始,电梯在第0层,并且最终完成任务时电梯不必一定返回到0层。你能帮助保安算出完成全部升降任务所花费的总时间吗?
输入描述:有多组测试样例。每组测试样例包含一个正整数N,接下来是N个正整数。 在输入中,所有的数字都小于100。当N=0时,表示输入结束。
输出描述:对于每一组测试样例,在一行中输出总时间。
示例1
输入
1 2
3 2 3 1
0
输出
20
53
解题思路:通过观察,我们可以发现,每组的测试样例,都包含了升降序。只要让升序的时间加上降序的时间,就可以了。不过要注意的是,每一次开始,电梯都是从最下层开始的,因此我们需要先算出第一次搭电梯所需要的时间,这个时间不管怎么样都是升序的,因此需要(楼层数)*5+10;
#include<iostream> using namespace std; int main() { while(1) { int N = 0; cin>>N; if(N==0) { break; } int arr[20] = {0}; for(int i = 0;i<N;i++) { cin>>arr[i]; } int count = 0; count += arr[0]*5+10; int dex = 0,pex = 1; while(arr[pex]!=0) { if(arr[dex]<arr[pex]) { count+=(arr[pex]-arr[dex])*5+10; } else{ count+=(arr[dex]-arr[pex])*4+10; } dex = pex; pex++; } cout<<count<<endl; } return 0; }
3.小明养猪
题目:小明明天就要大学毕业了,想到这四年来他都是在LOL中度过,什么专业知识都没学到,越想越后悔,越想越可怕,想着想着就睡着了。小明梦见了自己有个养猪场。在梦中,他养的猪一出生第二天开始就能每天中午生一只小猪,而且生下来的竟然都是母猪。不过光生小猪也不行,同时小明采用了一个很奇特的办法来管理他的养猪场:对于每头刚出生的小猪,在它生下第二头小猪后立马被杀掉,卖到超市里。假设在第一天,小明只买了一头刚出生的小猪,请问,在第N天晚上,小明的养猪场里还存有多少头猪?
输入描述:每行输入一个正整数N,代表小明创业的第N天。(0<N<20)
输出描述:对于每组数据,请在一行里输出第N天晚上养猪场里猪的数目,并且每组数据之间有一行相隔。
示例1
输入
2
3
输出
2
3
解题思路:其实这一算,一看,懂斐波那契数列的都懂,就是考斐波那契数列。
#include<iostream> using namespace std; int main() { int N = 0; while(cin>>N) { int count = 1; int fab1 = 0,fab2 = 1; int tmp = 0; while(N--) { tmp = 0; tmp = fab1+fab2; fab1= fab2; fab2 = tmp; count = tmp; } cout<<count<<endl<<endl;; } return 0; }
4.剔除掉重复数字
题目:Again, we have another simple task for you. Thereare N integers, you need to sort them in ascending order.It looks like a very easy task, isn’t it? But youSHOULD notice that they may containredundant elements, you need to exclude them before you sort the integers.
输入描述:Input contains multiple cases, for each case, the number of integers N is given in the first line (1<=N<=10), following N integers in the second line, each of which is in the range [0, 65536].Input will stop at inputting N=0.
输出描述:For each case, output the sorted integers in each line.The elements areseparated by a single space (EXCEPT the last one!!!).
示例1
输入
5
4 1 2 3 3
0
输出
1 2 3 4
解题思路:创建一个新数组,那么,让作为这个数字的下标的元素+1,然后遍历这个数组,如果元素大于等于1的,就打印出来,而且是按递增顺序的。就是复杂读有点高。。。
#include<iostream> using namespace std; int main() { while(1) { int N = 0; cin>>N; if(N==0) { break; } int arr[10] = {0}; for(int i = 0;i<N;i++) { cin>>arr[i]; } int brr[10000] = {0}; for(int i = 0;i<N;i++) { brr[arr[i]]++; } for(int i = 0;i<10000;i++) { if(brr[i]>=1) { cout<<i<<" "; } } cout<<endl; } return 0; }