1-1 选票统计
任务描述:
某校学生会主席由全校学生投票选举产生,共有m名候选人报名参选,编号为1到m(0<m<1000),全校有n名学生(0<n<30000),每人都可以投票。但每人只能投一票,每票只能选1名候选人。请你设计一个程序能够统计出哪个候选人得票最高,得了多少票。不会出现得票数相同的情况。
输入格式:
第一行输入候选人数m和学生数n,以空格分开;下面依次输入每个学生所选的候选人的编号。
输出格式:
第一行输出得票最多的候选人编号;第二行输出该候选人所得的票数。
输入样例:
3 10 1 2 3 2 3 1 2 3 1 3
输出样例:
3 4
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> struct count { int id,count; }a[1000]; int main() { int m,n,i,max=-1,id,t; scanf("%d%d",&m,&n); for(i=1;i<=n;i++) { a[i].count=0; a[i].id=i; } for(i=1;i<=n;i++) { scanf("%d",&id); a[id].count++; } for(i=1;i<=m;i++) { if(a[i].count>max) { max=a[i].count; t=i; } } printf("%d\n%d\n",t,max); return 0; }
1-2 小 I 选宾馆
任务描述:
小 I 去天津玩啦,一路上,他跟他的同学发生了许多有趣的事。到了晚上了,小 I 跟他的同学们要选一个宾馆住下了。但是形形色色的宾馆让小 I 不知所措。对于一个宾馆来说,有许多特征,比如「价格」、「舒适度」。小I会对每个特征都有一个满意度。小I会选择出满意度更高一些的宾馆。其中,「价格」对于小 I 来说是最重要的,其次是「舒适度」。如果有两个宾馆,如果对「价格」的满意度相同,那么根据「舒适度」进行选择;如果有多个宾馆条件相同,输出编号最小的宾馆。小 I 现在处于水深火热之中,因为他们面对一堆宾馆不知所措,他想到了会编程的你,如果你不帮他选出来,他可能就会露宿街头了QAQ~你能帮他按照他的意愿找到小I最满意的宾馆吗?
输入格式:
给出 n (n <= 5000) 代表 n 个宾馆(编号从 1 – n),随后有 n 行数据。每行数据有两个整数,分别代表小I对「价格」、「舒适度」的满意程度,数值越大满意程度越高,满意度的范围从0 – 5000。
输出格式:
输出按照描述的条件中小I最满意的宾馆编号,如果有多个宾馆条件相同,输出编号最小的宾馆。
输入样例:
4 0 1 1 0 1 1 1 0
输出样例:
3
相关限制:
代码长度限制16KB 时间限制1000ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> struct count { int a,b; }s[5000],t; int main() { int n,i,t,max=-1; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&s[i].a,&s[i].b); } for(i=0;i<n;i++) { if(s[i].a>max) { max=s[i].a; t=i; } else if(s[i].a==max) { if(s[i].b>s[t].b) { t=i; } } } printf("%d\n",t+1); return 0; }
1-3 最终排名
任务描述:
第四届山东理工大学ACM网络编程擂台赛比赛完后需要产生一个最终排名,排名按照题数多少来决定。但是有太多的队伍参与,手动计算排名已经不能满足比赛的需求。现在有一份名单记录各个队伍的ID和做出的题目数,需要你写一个程序,产生最终的排名。
为了简化题目,这里的排名规则为:做出题目数量多的队伍排在前面,如果题数相等,保持输入时的相对顺序不要改变。
输入格式:
第一行有一个正整数N(1 < N ≤ 10000),表示队伍数量。接下来N 行包含两个整数,1 ≤ ID ≤ 10^7, 0 ≤ M ≤ 100。ID为队伍的编号,M为做出的题数。
输出格式:
输出包含N行;第i行有两个整数,ID和M表示排在第i位的队伍的ID和做出的题数。
输入样例:
8 1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4
输出样例:
3 5 26 4 22 4 16 3 20 3 1 2 11 2 7 1
相关限制:
代码长度限制16KB 时间限制400ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> struct count { int a,b; } s[100000],t; int main() { int n,i,j; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d%d",&s[i].a,&s[i].b); } for(i=0; i<n-1; i++) { for(j=0; j<n-1-i; j++) { if(s[j].b<s[j+1].b) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } } } for(i=0;i<n;i++) printf("%d %d\n",s[i].a,s[i].b); return 0; }
1-4 选夫婿1
任务描述:
倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观。前来参与竞选的男生藏龙卧虎,高手云集,才子遍布,帅哥纷纭,更不乏富二代,官二代,可谓声势空前。每个人参与竞选的帅哥除了进行一段激情洋溢的求婚演讲以外,还要报上自己姓名、身高和体重,以及个人简历。最后再进行文武选拔,最后夺魁者方能得到潘小姐的芳心。潘小姐不爱名利,只看人,第一关就是身高和体重要合格,即必须在其要求的范围内,否则直接排除在外,不允许参加下一轮的选拔。作为一个程序员,你没有钱也没有权,擅长的也就是编程了。潘小姐也发现了这一点,所以把首轮根据身高体重进行选拔的任务交给了你,如果完成的好,你可以直接进入下一轮选拔,你笑了。
输入格式:
潘小姐给你了所有报名男生的信息。输入数据的第一行是一个正整数N (0 < N < 1000)。之后N 行数据,每行包含三部分,用空格隔开。第一部分是报名者的姓名name(长度小于20的字符串),然后是整数身高h(0 < h < 300),第三部分是整数体重w (0 < w < 200)。最后一行是四个整数a,b,c,d.表示身高的合格范围是[a,b],体重的合格范围是[c,d](0 < a < b < 200, 0 < c < d < 300)。
输出格式:
你需要把合格的男生信息按照身高从低到高输出,格式跟输入一样,也是每行三个信息,共N行,如果身高相同则按体重从轻到重输出,若没有合格人选则输出No,具体格式见样例。
输入样例:
在这里给出一组输入。例如:
8 武大郎 70 40 西门庆 180 70 李逵 160 150 燕青 175 69 鲁智深 180 100 武松 180 75 小泉纯一狼 30 20 孙二娘 169 60 165 190 60 90
输出样例:
在这里给出相应的输出。例如:
孙二娘 169 60 燕青 175 69 西门庆 180 70 武松 180 75
相关限制:
代码长度限制16KB 时间限制1000ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> struct count { int h,w; char f[20]; } s[1000],t; int main() { int n,i,j,a,b,c,d,x=0; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%s %d%d",s[i].f,&s[i].h,&s[i].w); } for(i=0; i<n-1; i++) { for(j=0; j<n-1-i; j++) { if(s[j].h>s[j+1].h) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } else if(s[j].h==s[j+1].h) { if(s[j].w>s[j+1].w) { t=s[j]; s[j]=s[j+1]; s[j+1]=t; } } } } scanf("%d%d%d%d",&a,&b,&c,&d); for(i=0;i<n;i++) { if(s[i].h>=a&&s[i].h<=b&&s[i].w>=c&&s[i].w<=d) { printf("%s %d %d\n",s[i].f,s[i].h,s[i].w); x++; } }if(x==0) printf("No\n"); return 0; }
1-5 数据结构实验之链表一:顺序建立链表
任务描述:
输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据。
输入格式:
第一行输入整数的个数N(1 <= N <= 100000)。第二行依次输入每个整数。
输出格式:
输出这组整数。
输入样例:
在这里给出一组输入。例如:
8 12 56 4 6 55 15 33 62
输出样例:
在这里给出相应的输出。例如:
12 56 4 6 55 15 33 62
相关限制:
代码长度限制16KB 时间限制1000ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> int main() { int n,a[100000],i; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); return 0; }
1-6 数据结构实验之链表三:链表的逆置
任务描述:
输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据。
输入格式:
输入多个整数,以-1作为结束标志。(整数个数不超过100000,不低于1)
输出格式:
输出逆置后的单链表数据。
输入样例:
在这里给出一组输入。例如:
12 56 4 6 55 15 33 62 -1
输出样例:
在这里给出相应的输出。例如:
62 33 15 55 6 4 56 12
相关限制:
代码长度限制16KB 时间限制1000ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> int main() { int n,i,a[100000],t=0; while(~scanf("%d",&n)) { if(n==-1) break; else { a[t]=n; t++; } } for(i=t-1;i>0;i--) printf("%d ",a[i]); printf("%d\n",a[0]); return 0; }
1-7 师–链表的结点插入
任务描述:
给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面插入一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。
输入格式:
多组输入。每组数据首先输入一个整数n(1<=n<=100),代表有n次操作。接下来的n行,每行有两个整数Mi(0<=Mi<=10000),Xi。
输出格式:
对于每组数据。从前到后输出链表的所有元素,两个元素之间用空格隔开。
输入样例:
在这里给出一组输入。例如:
4 1 1 1 2 0 3 100 4
输出样例:
在这里给出相应的输出。例如:
3 1 2 4
相关限制:
代码长度限制16KB 时间限制1000ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> struct node { int data; struct node *next; }; int main() { int n,m,x; struct node *head,*p,*q; while(~scanf("%d",&n)) { head=(struct node *)malloc(sizeof(struct node)); head->next=NULL; while(n--) { q=head; scanf("%d%d",&m,&x); while(m--&&q->next) { q=q->next; } p=(struct node *)malloc(sizeof(struct node)); p->data=x; p->next=NULL; p->next=q->next; q->next=p; } p=head->next; while(p!=NULL) { if(p->next!=NULL) printf("%d ",p->data); else printf("%d\n",p->data); p=p->next; } } return 0; }
1-8 约瑟夫问题
任务描述:
n个人想玩残酷的死亡游戏,游戏规则如下:n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号。
输入格式:
输入n和m值。 (1<=n<=100 , 1<=m<=100)
输出格式:
输出胜利者的编号。
输入样例:
在这里给出一组输入。例如:
5 3
输出样例:
在这里给出相应的输出。例如:
4
相关限制:
代码长度限制16KB 时间限制1000ms 内存限制64MB 栈限制8192KB
答案:
#include <stdio.h> int main() { int p=0,n,m,i; scanf("%d%d",&n,&m); for(i=2;i<=n;i++) { p=(p+m)%i; } printf("%d\n",p+1); return 0; }