您好,欢迎来到客趣旅游网。
搜索
您的当前位置:首页程序设计基础II-单元测试1(机测)

程序设计基础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);
}
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- kqyc.cn 版权所有 赣ICP备2024042808号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务