程序设计基础II-单元测试1(机测)
7-1 sdut-C语言实验-宣传部招聘
2023年的烧烤让全国的人民了解到了淄博,来自天津的小杨同学也被淄博的温暖所吸引考入了山东理工大学。小杨同学具备天津人的幽默和乐观,于是顺利地进入到学校学生会的宣传部工作,并且协助招聘1名宣传委员。
报名的人很多,每人首先交1张照片,小杨同学需要从n个照片里根据特征值选择1人(序号从 0 到 n - 1),每个参加招聘的同学都有自己的风格,可以按特征划分出 3 个特征值 w1 , w2 , w3 ,宣传部需要 w1 特征值高的同学,不太看重 w3 ,于是小杨同学对于每个特征都赋予一个权重,分别对应为0.7 0.2 0.1,你能帮小杨同学选出宣传部需要的人吗?
输入格式:
第一行给出一个整数 n (n <= 1000) ,之后有 n 行数。
每行数有三个整数 w1, w2, w3,表示三个特征值。
不存在权值和相等的情况。
输出格式:
输出n 个应聘同学中权值和最高的序号。
输入样例:
3
1 5 10
5 1 10
10 5 1
输出样例:
2
#include<stdio.h>
struct
{
int w1;
int w2;
int w3;
}a[1000];
int main()
{
int n,i,k;
int b[1000];
int max=-1;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d %d",&a[i].w1,&a[i].w2,&a[i].w3);
}
for(i=0;i<n;i++)
{
b[i]=a[i].w1*0.7+a[i].w2*0.2+a[i].w3*0.1;
}
for(i=0;i<n;i++)
{
if(b[i]>max)
{
max=b[i];
k=i;
}
}
printf("%d",k);
return 0;
}
7-2 sdut-C语言实验-选票统计
某校学生会主席由全校学生投票选举产生,共有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
#include<stdio.h>
struct
{
int a[1000];
}b;
int main()
{
int m,n,x,i,k;
int max=-1;
scanf("%d %d",&m,&n);
for(i=0;i<n;i++)
{
scanf("%d",&x);
b.a[x]++;
}
for(x=1;x<=m;x++)
{
if(b.a[x]>max)
{
max=b.a[x];
k=x;
}
}
printf("%d\n%d",k,max);
return 0;
}
7-3 sdut-C语言实验-排名次
SDUT某实验室集训队的选拔又要开始了,集训队需要根据参加者的分数排名来决定谁能够进入集训队。 先要求你写一个自动排名的程序,根据每一个参与选拔的同学的分数进行排名,集训队需要根据大家的分数排名来决定谁能够进入集训队。
你能完成这个程序么?
输入格式:
输入的第一行为n ( 0<n<=50) ;
之后给出n 行,每行为一个人名和ta所得到的分数。保证没有相同的分数。
人名为英文单词,长度不超过10。
输出格式:
输出为n行,每行一个人名与他的得分。每一行最后没有多余的空格。
具体输出格式见样例。
输入样例:
3
Dan 10
John 50
Danny 30
输出样例:
John 50
Danny 30
Dan 10
#include<stdio.h>
struct
{
char name[11];
int score;
}a[50],k;
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d",&a[i].name,&a[i].score);
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j].score<a[j+1].score)
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
for(i=0;i<n;i++)
{
printf("%s %d\n",a[i].name,a[i].score);
}
return 0;
}
7-4 sdut-C语言实验-选夫婿
倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观。前来参与竞选的男生藏龙卧虎,高手云集,才子遍布,帅哥纷纭,更不乏富二代,官二代,可谓声势空前。

每个人参与竞选的帅哥除了进行一段激情洋溢的求婚演讲以外,还要报上自己姓名、身高和体重,以及个人简历。最后再进行文武选拔,最后夺魁者方能得到潘小姐的芳心。
潘小姐不爱名利,只看人,第一关就是身高和体重要合格,即必须在其要求的范围内,否则直接排除在外,不允许参加下一轮的选拔。
作为一个程序员,你没有钱也没有权,擅长的也就是编程了。潘小姐也发现了这一点,所以把首轮根据身高体重进行选拔的任务交给了你,如果完成的好,你可以直接进入下一轮选拔,你笑了。
输入格式:
潘小姐给你了所有报名男生的信息。
输入数据的第一行是一个正整数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
#include<stdio.h>
struct
{
char name[21];
int h;
int w;
}ren[1000],k;
int main()
{
int n,i,j,a,b,c,d,flag=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %d %d",&ren[i].name,&ren[i].h,&ren[i].w);
}
scanf("%d %d %d %d",&a,&b,&c,&d);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if((ren[j].h>ren[j+1].h)||((ren[j].h==ren[j+1].h)&&(ren[j].w>ren[j+1].w)))
{
k=ren[j+1];
ren[j+1]=ren[j];
ren[j]=k;
}
}
}
for(i=0;i<n;i++)
{
if(ren[i].h>=a&&ren[i].h<=b&&ren[i].w>=c&&ren[i].w<=d)
{
printf("%s %d %d\n",ren[i].name,ren[i].h,ren[i].w);
flag=1;
}
}
if(flag==0)
printf("No");
return 0;
}
7-5 sdut-C语言实验-顺序建立链表
输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据。
输入格式:
第一行输入整数的个数N;
第二行依次输入每个整数。
输出格式:
输出这组整数。
输入样例:
8
12 56 4 6 55 15 33 62
输出样例:
12 56 4 6 55 15 33 62
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node*next;
};
int main()
{
int n,i;
scanf("%d",&n);
struct node*head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
struct node*tail=head;
for(i=0;i<n;i++)
{
struct node*p=(struct node*)malloc(sizeof(struct node));
p->next=NULL;
scanf("%d",&p->data);
p->next=tail->next;
tail->next=p;
tail=tail->next;
}
struct node*r=(struct node*)malloc(sizeof(struct node));
r=head->next;
while(r)
{
if(r->next==NULL)
printf("%d",r->data);
else
printf("%d ",r->data);
r=r->next;
}
return 0;
}
7-6 sdut-C语言实验-链表的逆置
输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据。
输入格式:
输入多个整数,以-1作为结束标志。
输出格式:
输出逆置后的单链表数据。
输入样例:
12 56 4 6 55 15 33 62 -1
输出样例:
62 33 15 55 6 4 56 12
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node *creat()
{
struct node *head,*tail,*p;
int num;
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
tail=head;
while(~scanf("%d",&num)&&num!=-1)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=num;
p->next=NULL;
tail->next=p;
tail=p;
}
return head;
}
struct node *reverse(struct node *head)
{
struct node *p,*q;
p=head->next;
head->next=NULL;
q=p->next;
while(p!=NULL)
{
p->next=head->next;
head->next=p;
p=q;
if(q!=NULL)
q=q->next;
}
return head;
}
int main()
{
struct node *head,*p;
head=creat();
head=reverse(head);
p=head->next;
while(p->next!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("%d\n",p->data);
return 0;
}
7-7 sdut-C语言实验-链表的结点插入
给出一个只有头指针的链表和 n 次操作,每次操作为在链表的第 m 个元素后面插入一个新元素x。若m 大于链表的元素总数则将x放在链表的最后。
输入格式:
多组输入。每组数据首先输入一个整数n(n∈[1,100]),代表有n次操作。
接下来的n行,每行有两个整数Mi(Mi∈[0,10000]),Xi。
输出格式:
对于每组数据。从前到后输出链表的所有元素,两个元素之间用空格隔开。
输入样例:
4
1 1
1 2
0 3
100 4
输出样例:
3 1 2 4
#include<stdio.h>
#include<stdlib.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;
}
q=head->next;
while(q)
{
if(q->next==NULL) printf("%d\n",q->data);
else printf("%d ",q->data);
q=q->next;
}
}
return 0;
}
7-8 sdut-C语言实验-敢死队问题
中国人民自古具有不怕死的精神,尤其在保家卫国的战场上,为了保卫祖国和人民,总是有人勇敢加入“敢死队”,不怕困难,勇于牺牲。大家不要以为我来介绍电影了,因为数据结构里真有这么道程序设计题目,原题如下:
淄博市马鞍山保卫战中,有M个敢死队员要炸掉敌人的一个碉堡,谁都抢着想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。
今天大家就要完成这道敢死队问题。我们假设排长是1号,按照上面介绍,从一号开始数,数到5的那名战士去执行任务,那么排长是第几个去执行任务的?
输入格式:
输入包括多组数据,每行一个整数M(0<=M<=10000)(敢死队人数),若M=0,输入结束,不做处理。
输出格式:
输出一个整数n,代表排长是第n个去执行任务。
输入样例:
9
6
223
0
输出样例:
在这里给出相应的输出。例如:
2
6
132
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int main()
{
int n,m,i,k=0,j;
struct node *head,*tail,*p,*q;
while(~scanf("%d",&m)&&m!=0)
{
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
head->data=1;
tail=head;
for(i=2;i<=m;i++)
{
p=(struct node*)malloc(sizeof(struct node));
p->data=i;
tail->next=p;
tail=p;
}
tail->next=head;
p=head;
k=0;
j=0;
q=tail->next;
while(p->next!=NULL)
{
j++;
if(j==4)
{
q=p->next;
if(q->data==1)
break;
else {
p->next=p->next->next;
free(q);
j=0;
k++;
}
}
p=p->next;
}
printf("%d\n",k+1);
}
}
更多推荐
所有评论(0)