SDUT-程序设计基础Ⅱ-单元测试1

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;
}
如果对您有帮助的话,能否支持一下博主?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇