练习

  • L1-059 敲笨钟 (20 分)
  • L1-062 幸运彩票 (15 分)
  • L1-035 情人节 (15 分)
  • L1-071 前世档案 (20 分)
  • L1-050 倒数第N个字符串 (15 分)
  • L1-049 天梯赛座位分配 (20 分)
  • L1-072 刮刮彩票 (20 分)
  • L2-027 名人堂与代金券 (25 分)
  • L2-001 紧急救援 (25 分)

L1-059 敲笨钟 (20 分)

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。

现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。

输入格式:
输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号 , 分隔,句号 . 结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。

输出格式:
对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出 Skipped,即跳过此句。

输入样例:
5
xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong.
tian sheng wo cai bi you yong, qian jin san jin huan fu lai.
xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long.
zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong.
ren xian gui hua luo, ye jing chun shan kong.
输出样例:
xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong.
Skipped
xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong.
Skipped
Skipped

#include<stdio.h>
#include<string.h>
int main()
{int n,l,count,flag=-1,t;char b[200];char ch;scanf("%d",&n);getchar();for(int i=0;i<n;i++){gets(b);l=strlen(b);count=0;flag=-1;if(b[l-2]=='g'&&b[l-3]=='n'&&b[l-4]=='o'){for(int j=l-5;j>0;j--)if(b[j]==','&&b[j-1]=='g'&&b[j-2]=='n'&&b[j-3]=='o')flag=j;if(flag>0){for(int j=l-5;j>flag;j--)if(b[j]==' '){count++;if(count==3){    t=j;break;}}for(int k=0;k<t;k++)printf("%c",b[k]);printf(" qiao ben zhong.\n");}else printf("Skipped\n");}else printf("Skipped\n");}return 0;
}

L1-062 幸运彩票 (15 分)

彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。

输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。

输出格式:
对每张彩票,如果它是幸运的,就在一行中输出 You are lucky!;否则输出 Wish you good luck.。

输入样例:
2
233008
123456
输出样例:
You are lucky!
Wish you good luck.

#include<stdio.h>
int main()
{int n;int sum1,sum2;char a;scanf("%d",&n);getchar();for(int i=0;i<n;i++){    sum1=0;sum2=0;for(int j=0;j<3;j++){scanf("%c",&a);sum1+=(a-'0');}for(int k=0;k<3;k++){scanf("%c",&a);sum2+=(a-'0');}getchar();if(sum1==sum2)printf("You are lucky!\n");else printf("Wish you good luck.\n");}return 0;
}

L1-035 情人节 (15 分)

以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。

输入格式:
输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

输出格式:
根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner…”;若只有A没有B,则输出“A is the only one for you…”;若连A都没有,则输出“Momo… No one is for you …”。

输入样例1:
GaoXZh
Magi
Einst
Quark
LaoLao
FatMouse
ZhaShen
fantacy
latesum
SenSen
QuanQuan
whatever
whenever
Potaty
hahaha
.
输出样例1:
Magi and Potaty are inviting you to dinner…
输入样例2:
LaoLao
FatMouse
whoever
.
输出样例2:
FatMouse is the only one for you…
输入样例3:
LaoLao
.
输出样例3:
Momo… No one is for you …

#include<stdio.h>
#include<string.h>
int main()
{int i=1;char a[11];char b1[12];char b2[12];gets(a);while(strcmp(a, ".")!=0){if(i==2)strcpy(b1,a);if(i==14){strcpy(b2,a);break;}    gets(a);i++;}if(i==14)printf("%s and %s are inviting you to dinner...",b1,b2);else if(i<=2)printf("Momo... No one is for you ...");else printf("%s is the only one for you...",b1);return 0;}

L1-071 前世档案 (20 分)

现在我们把结论从左到右顺序编号,编号从 1 开始。这里假设回答都是简单的“是”或“否”,又假设回答“是”对应向左的路径,回答“否”对应向右的路径。给定玩家的一系列回答,请你返回其得到的结论的编号。

输入格式:
输入第一行给出两个正整数:N(≤30)为玩家做一次测试要回答的问题数量;M(≤100)为玩家人数。

随后 M 行,每行顺次给出玩家的 N 个回答。这里用 y 代表“是”,用 n 代表“否”。

输出格式:
对每个玩家,在一行中输出其对应的结论的编号。

输入样例:
3 4
yny
nyy
nyn
yyn
输出样例:
3
5
6
2

#include<stdio.h>
#include<math.h>
int main()
{int n,m,k,t;char ch;scanf("%d%d",&n,&m);getchar();for(int i=0;i<m;i++){     k=pow(2,n);t=0;for(int j=0;j<n;j++){      k=k/2;ch=getchar();if(ch=='n')t+=k;}getchar();printf("%d\n",t+1);}return 0;}

L1-050 倒数第N个字符串 (15 分)

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

输入格式:
输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤10
​5
​​ )。

输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。

输入样例:
3 7417
输出样例:
pat

#include<stdio.h>
#include<math.h>
int main()
{   int l,n;int a,b,c;scanf("%d%d",&l,&n);a=pow(26,l)-n;//确定位置for(int i=l;i>0;i--){b=a/pow(26,i-1);printf("%c",'a'+b);c=pow(26,i-1);a=a%c;}return 0;
}

进制

L1-049 天梯赛座位分配 (20 分)

天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位号,从 1 开始编号。

输入格式:
输入在一行中给出参赛的高校数 N (不超过100的正整数);第二行给出 N 个不超过10的正整数,其中第 i 个数对应第 i 所高校的参赛队伍数,数字间以空格分隔。

输出格式:
从第 1 所高校的第 1 支队伍开始,顺次输出队员的座位号。每队占一行,座位号间以 1 个空格分隔,行首尾不得有多余空格。另外,每所高校的第一行按“#X”输出该校的编号X,从 1 开始。

输入样例:
3
3 4 2
输出样例:
#1
1 4 7 10 13 16 19 22 25 28
31 34 37 40 43 46 49 52 55 58
61 63 65 67 69 71 73 75 77 79
#2
2 5 8 11 14 17 20 23 26 29
32 35 38 41 44 47 50 53 56 59
62 64 66 68 70 72 74 76 78 80
82 84 86 88 90 92 94 96 98 100
#3
3 6 9 12 15 18 21 24 27 30
33 36 39 42 45 48 51 54 57 60

分析 没思路
真滴没有

L1-072 刮刮彩票 (20 分)

每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 3×3 的“九宫格”形式排布在彩票上。

在游戏开始时能看见一个位置上的数字,其他位置上的数字均不可见。你可以选择三个位置的数字刮开,这样玩家就能看见四个位置上的数字了。最后玩家再从 3 横、3 竖、2 斜共 8 个方向中挑选一个方向,方向上三个数字的和可根据下列表格进行兑奖,获得对应数额的金币。

数字合计 获得金币 数字合计 获得金币
6 10,000 16 72
7 36 17 180
8 720 18 119
9 360 19 36
10 80 20 306
11 252 21 1,080
12 108 22 144
13 72 23 1,800
14 54 24 3,600
15 180

现在请你写出一个模拟程序,模拟玩家的游戏过程。

输入格式:
输入第一部分给出一张合法的彩票,即用 3 行 3 列给出 0 至 9 的数字。0 表示的是这个位置上的数字初始时就能看见了,而不是彩票上的数字为 0。

第二部给出玩家刮开的三个位置,分为三行,每行按格式 x y 给出玩家刮开的位置的行号和列号(题目中定义左上角的位置为第 1 行、第 1 列。)。数据保证玩家不会重复刮开已刮开的数字。

最后一部分给出玩家选择的方向,即一个整数: 1 至 3 表示选择横向的第一行、第二行、第三行,4 至 6 表示纵向的第一列、第二列、第三列,7、8分别表示左上到右下的主对角线和右上到左下的副对角线。

输出格式:
对于每一个刮开的操作,在一行中输出玩家能看到的数字。最后对于选择的方向,在一行中输出玩家获得的金币数量。

输入样例:
1 2 3
4 5 6
7 8 0
1 1
2 2
2 3
7
输出样例:
1
5
6
180

#include<stdio.h>
int main()
{int a[3][3]={0};int b[3][2];int c[26]={0,0,0,0,0,0,10000,36,720,360,80,252,108,72,54,180,72,180,119,36,306,1080,144,1800,3600};int x,y,h,l,sum=0,t;for(int i=0;i<3;i++)for(int j=0;j<3;j++){scanf("%d",&a[i][j]);sum+=a[i][j];//已知数的大小=45-sumif(a[i][j]==0){x=i;y=j;//确定已知数的位置}}a[x][y]=45-sum;for(int k=0;k<3;k++){   scanf("%d %d",&h,&l);getchar();printf("%d\n",a[h-1][l-1]);//输出对应的值b[k][0]=h;//存入一个数组b[k][1]=l;}int count=0;//求和int n;scanf("%d",&t);switch(t)//根据输入的值 按对应的方式求和{case 1:for(n=0;n<3;n++)count+=a[0][n];break;case 2:for(n=0;n<3;n++)count+=a[1][n];break;case 3:for(n=0;n<3;n++)count+=a[2][n];break;case 4:for(n=0;n<3;n++)count+=a[n][0];break;case 5:for(n=0;n<3;n++)count+=a[n][1];break;case 6:for(n=0;n<3;n++)count+=a[n][2];break;case 7:count=a[0][0]+a[1][1]+a[2][2];break;case 8:count=a[0][2]+a[1][1]+a[2][0];}printf("%d",c[count]);//输出结果return 0;}

L2-027 名人堂与代金券 (25 分)

对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,总评成绩必须达到 60 分及以上,并且有另加福利:总评分在 [G, 100] 区间内者,可以得到 50 元 PAT 代金券;在 [60, G) 区间内者,可以得到 20 元PAT代金券。全国考点通用,一年有效。同时任课老师还会把总评成绩前 K 名的学生列入课程“名人堂”。本题就请你编写程序,帮助老师列出名人堂的学生,并统计一共发出了面值多少元的 PAT 代金券。

输入格式:
输入在第一行给出 3 个整数,分别是 N(不超过 10 000 的正整数,为学生总数)、G(在 (60,100) 区间内的整数,为题面中描述的代金券等级分界线)、K(不超过 100 且不超过 N 的正整数,为进入名人堂的最低名次)。接下来 N 行,每行给出一位学生的账号(长度不超过15位、不带空格的字符串)和总评成绩(区间 [0, 100] 内的整数),其间以空格分隔。题目保证没有重复的账号。

输出格式:
首先在一行中输出发出的 PAT 代金券的总面值。然后按总评成绩非升序输出进入名人堂的学生的名次、账号和成绩,其间以 1 个空格分隔。需要注意的是:成绩相同的学生享有并列的排名,排名并列时,按账号的字母序升序输出。

输入样例:
10 80 5
cy@zju.edu.cn 78
cy@pat-edu.com 87
1001@qq.com 65
uh-oh@163.com 96
test@126.com 39
anyone@qq.com 87
zoe@mit.edu 80
jack@ucla.edu 88
bob@cmu.edu 80
ken@163.com 70
输出样例:
360
1 uh-oh@163.com 96
2 jack@ucla.edu 88
3 anyone@qq.com 87
3 cy@pat-edu.com 87
5 bob@cmu.edu 80
5 zoe@mit.edu 80

#include<stdio.h>
#include<string.h>typedef struct student
{char name[16];//邮箱int score;//分数int mc;//名次
}S;//定义一个结构体存放信息int main()
{   int n,g,k;//总人数,分割点,名人堂人数scanf("%d%d%d",&n,&g,&k);S a[10001];int pat=0;//代金券int i,j;for(i=0;i<n;i++){scanf("%s%d",a[i].name,&a[i].score);if(a[i].score>=g)pat+=50;else if(a[i].score>=60&&a[i].score<g)pat+=20;}int t;int m=1;char b[16];      //交换变量;for(i=0;i<n;i++){    for(j=i;j<n;j++){if(a[i].score<a[j].score){   t=a[j].score;a[j].score=a[i].score;a[i].score=t;strcpy(b,a[i].name);strcpy(a[i].name,a[j].name);strcpy(a[j].name,b);}else if((a[i].score==a[j].score)){   if(strcmp(a[i].name,a[j].name)>0){t=a[j].score;a[j].score=a[i].score;a[i].score=t;strcpy(b,a[i].name);strcpy(a[i].name,a[j].name);strcpy(a[j].name,b);}}} a[i].mc=m++;//暂时排序}for(i=0;i<n;i++){for(j=n;j>i;j--)//一个从前往后,一个从后往前if(a[i].score==a[j].score){a[j].mc=a[i].mc;//后面的名次与前面的名次同步}}printf("%d\n",pat);for(i=0;i<n;i++){if(a[i].mc<=k)printf("%d %s %d\n",a[i].mc,a[i].name,a[i].score);}return 0;
}

最后一个测试点显示超时

改用 C++ 导入algorithm
使用sort排序
通过

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
struct s
{char name[16];//邮箱int sc;//分数int mc;//名次
}a[10001];//定义一个结构体存放信息
int cmp(s a, s b) {if (a.sc == b.sc) return strcmp(a.name, b.name) < 0;return a.sc > b.sc;
}
int main()
{   int n,g,k,pat=0;//总人数,分割点,名人堂人数,代金券scanf("%d%d%d",&n,&g,&k);for(int i=0;i<n;i++)
{   scanf("%s%d",a[i].name,&a[i].sc);if(a[i].sc>=g)pat+=50;else if(a[i].sc>=60&&a[i].sc<g)pat+=20; }printf("%d\n",pat);sort(a,a+n,cmp);for(int j=1;j<=n;j++)a[j-1].mc=j;int m=1;for(int x=0;x<n;x++)for(int y=n;y>x;y--)//一个从前往后,一个从后往前if(a[x].sc==a[y].sc)a[y].mc=a[x].mc;//后面的名次与前面的名次同步for(int l=0;l<n;l++)if(a[l].mc<=k)printf("%d %s %d\n",a[l].mc,a[l].name,a[l].sc);return 0;
}

L2-001 紧急救援 (25 分)

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式:
输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。

第二行给出N个正整数,其中第i个数是第i个城市的救援队的数目,数字间以空格分隔。随后的M行中,每行给出一条快速道路的信息,分别是:城市1、城市2、快速道路的长度,中间用空格分开,数字均为整数且不超过500。输入保证救援可行且最优解唯一。

输出格式:
第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从S到D的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例:
4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2
输出样例:
2 60
0 1 3


PTA团队练习题C语言相关推荐

  1. PTA—比较大小(C语言)

    PTA-比较大小(C语言) 本题要求将输入的任意3个整数从小到大输出. 输入格式: 输入在一行中给出3个整数,其间以空格分隔. 输出格式: 在一行中将3个整数从小到大输出,其间以"-> ...

  2. PTA—考试座位号(C语言)

    PTA-考试座位号(C语言) 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试 ...

  3. PTA—计算摄氏温度(C语言)

    PTA-计算摄氏温度(C语言) 给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C.计算公式:C=5×(F−32)/9.题目保证输入与输出均在整型范围内. 输入格式: 输入在一行中给出一个华氏 ...

  4. 【PTA乙级练习题】topic:1001

    [PTA乙级练习题]topic:1001 题目 审题 代码 知识点 总结 题目 1001 害死人不偿命的(3n+1)猜想 (15 分) 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇 ...

  5. PTA 黑洞数 C语言

    PTA 黑洞数 C语言 问题描述: 黑洞数也称为陷阱数,又称"Kaprekar问题",是一类具有奇特转换特性的数. 任何一个各位数字不全相同的三位数,经有限次"重排求差& ...

  6. PTA团队天梯赛║L1-059 敲笨种

    PTA团队天梯赛║L1-059 敲笨种 一.题目要求 微博上有个自称"大笨钟V"的家伙,每天敲钟催促码农们爱惜身体早点睡觉.为了增加敲钟的趣味性,还会糟改几句古诗词.其糟改的方法为 ...

  7. java语言程序设计期末复习综合练习题_Java语言程序设计期末复习综合练习题答案...

    Java语言程序设计期末复习综合练习题 一.选择题. 2. main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( )? A.public stat ...

  8. c程序语言设计练习题,C语言程序设计练习题(含程序及参考答案)

    <C语言程序设计练习题(含程序及参考答案)>由会员分享,可在线阅读,更多相关<C语言程序设计练习题(含程序及参考答案)(47页珍藏版)>请在人人文库网上搜索. 1.1.定义一个 ...

  9. TrustBase团队完成subscript语言的Web3基金会Grant资助计划项目交付

    据官方消息,近日,波卡智能合约语言subscript的开发团队成功向Web3基金会交付了subscript语言的核心库功能. subscript语言是由TrustBase维护的用于波卡wasm智能合约 ...

最新文章

  1. java四子棋实验报告_Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
  2. 交换机发生网络通信故障问题时该怎么办?
  3. 计算机ip地址未修复连接不了无线网络,本地连接没有有效的ip配置,教您修复本地连接没有有效的ip配置...
  4. 聊聊flink Table的OrderBy及Limit
  5. java 浏览器 爬虫_java 网络编程-爬虫+模拟浏览器
  6. FLEX4 在组件中自定义ToolTip样式
  7. 程序员如何从0到1搭建自己的技术博客
  8. SQL:统计一个数据库中所有表记录的数量
  9. DHCP服务的介绍及配置详解
  10. 3dmax模型导入UE4
  11. keil中C语言取反操作结果是32位数
  12. Python QT学习——一个简单的入门案例(一)
  13. Ubuntu18.04+思岚激光雷达A2M7+ROS测试
  14. python实现zip分卷压缩与解压
  15. 用jQuery制作对联广告
  16. 浅谈C++类中6个成员函数
  17. 在bug的边缘疯狂试探之mybatis
  18. Notepad++ 7.6版本 安装hexeditor最新详细版本(小白版)
  19. 4年亏损超6亿,摩贝化学赴美上市能否输血成功?
  20. Formality简单实用之1--RTLvsRTL

热门文章

  1. loaders之val-loader
  2. Wi-Fi DFS与TPC介绍
  3. Windows变慢原因分析及解决方法·系统篇
  4. 新手入门:圆角使用方法详解,圆角形成原理以及各个值的意义
  5. C语言#if、##ifdef、#ifndef的用法详解,C语言条件编译详解
  6. 新手树莓派4B安装Supervised+Home Assistant及问题解决
  7. Pycharm 2018安装步骤
  8. 蓝桥杯 青少年创意编程大赛 scratch 组(一)
  9. 国外云盘(如Rapidgator)免费下载姿势详解
  10. 【HTML】html基本标签-1(文字,列表,图片标签)