【PTA】L1-034 L1-035 L1-036 L1-037 L1-038 L1-039 L1-040 L1-041 L1-042 L1-043 L1-044 L1-045(C)第七天

目录

L1-034 点赞

题解:

L1-035 情人节

题解:

L1-036 A乘以B

题解:

L1-037 A除以B

题解:

L1-038 新世界

题解:

L1-039 古风排版

题解:

L1-040 最佳情侣身高差

题解:

L1-041 寻找250

题解:

L1-042 日期格式化

题解:

L1-043 阅览室

题解:

L1-044 稳赢

题解:

L1-045 宇宙无敌大招呼

题解:


L1-034 点赞

分数 20

作者 陈越

单位 浙江大学

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1​⋯FK​”,其中1≤K≤10,Fi​(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式:

统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

输入样例:

4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123

输出样例:

233 3

题解:

#include <stdio.h>
int main(){
	int n,i,j,k,t,num;
	int a[1001]={0};
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&k);
		for(j=0;j<k;j++){
			scanf("%d",&t);
			a[t]++;
		}
	}
	int max=0,id;
	for(i=1000;i>=1;i--){
		if(a[i]>max){
			max=a[i];
			id=i;
		}
	}
	printf("%d %d",id,max);
} 

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()
{
    char ch[3][11];//用于接受数据
    int n = 1,k = 0;
    while(scanf("%s",ch[k]))
    {
        if(ch[k][0]=='.')//判断是否该停止
            break;
        getchar();//用于处理数据后面的回车(\n)
        n++;
        //筛选数据
        if(n==2)
            k = 1;
        else if(n==14)
            k = 2;
        else
            k = 0;
    }
    n--;//为输出做准备(输入.时n也加了1),ch[1]是A,ch[2]是B
    if(n<2)
        printf("Momo... No one is for you ...\n");
    else if(2 <= n && n < 14)
        printf("%s is the only one for you...\n",ch[1]);
    else
        printf("%s and %s are inviting you to dinner...\n",ch[1],ch[2]);
    return 0;
}

L1-036 A乘以B

分数 5

作者 陈越

单位 浙江大学

看我没骗你吧 —— 这是一道你可以在 10 秒内完成的题:给定两个绝对值不超过 100 的整数 A 和 B,输出 A 乘以 B 的值。

输入格式:

输入在第一行给出两个整数 A 和 B(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出 A 乘以 B 的值。

输入样例:

-8 13

输出样例:

-104

题解:

#include<stdio.h>
int main(){
    int a,b;
   scanf("%d %d",&a,&b);
    int c=a*b;
    printf("%d",c);
    return 0;
}

L1-037 A除以B

分数 10

作者 陈越

单位 浙江大学

真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。

输入格式:

输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。

输入样例1:

-1 2

输出样例1:

-1/2=-0.50

输入样例2:

1 -3

输出样例2:

1/(-3)=-0.33

输入样例3:

5 0

输出样例3:

5/0=Error

题解:

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    if(b<0)printf("%d/(%d)=%.2f",a,b,(float)a/b);
    if(b==0)printf("%d/%d=Error",a,b);
    if(b>0)printf("%d/%d=%.2f",a,b,(float)a/b);
    return 0;
}

L1-038 新世界

分数 5

作者 陈越

单位 浙江大学

这道超级简单的题目没有任何输入。

你只需要在第一行中输出程序员钦定名言“Hello World”,并且在第二行中输出更新版的“Hello New World”就可以了。

输入样例:

输出样例:

Hello World
Hello New World

题解:

#include<stdio.h>
int main(){
   printf("Hello World\n");
    printf("Hello New World");
}

L1-039 古风排版

分数 20

作者 陈越

单位 浙江大学

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s

题解:

#include<stdio.h>
#include<string.h>
int main(){
    int n,m,t=0;
    char a[1001];
    char z[100][100];
    scanf("%d",&n);
    getchar();
    gets(a);
    int s=strlen(a);
    if(s%n==0){
        m=s/n;
    }else{
        m=s/n+1;
    }
    for(int i=m-1;i>=0;i--){
        for(int j=0;j<n;j++){
            if(a[t]!='\0'){
                z[j][i]=a[t];
                t++;
            }else{
                z[j][i]=' ';
            }
        }
    }
    for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                printf("%c", z[i][j]);
            }
            printf("\n");
        }
}

L1-040 最佳情侣身高差

分数 10

作者 陈越

单位 浙江大学

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式:

输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。

输出格式:

对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:

2
M 1.75
F 1.8

输出样例:

1.61
1.96

题解:

#include<stdio.h>
int main(){
    int n,i;
    double a;
    char sex;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        getchar();
        scanf("%c %lf",&sex,&a);
        if(sex=='M'){printf("%.2f\n",a/1.09);}
        else {printf("%.2f\n",a*1.09);}
    }
}

L1-041 寻找250

分数 10

作者 陈越

单位 浙江大学

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式:

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:

888 666 123 -233 250 13 250 -222

输出样例:

5

题解:

#include<stdio.h>
int main(){
    int a,s=0;
    while(++s){
        scanf("%d",&a);
        if(a==250){
            printf("%d",s);
            break;
        }
    }
    return 0;
}

L1-042 日期格式化

分数 5

作者 陈越

单位 浙江大学

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式:

输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式:

在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

输入样例:

03-15-2017

输出样例:

2017-03-15

题解:

#include<stdio.h>
int main()
{
	int month;
	int day;
	int year;
	scanf("%d-%d-%d",&month,&day,&year);
	if(year>=1900)
	printf("%d-%02d-%02d\n",year,month,day);
	return 0;
}

L1-043 阅览室

分数 20

作者 陈越

单位 浙江大学

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。

注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

输入格式:

输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:

书号([1, 1000]内的整数) 键值SE发生时间hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)

每一天的纪录保证按时间递增的顺序给出。

输出格式:

对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

输入样例:

3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00

输出样例:

2 196
0 0
1 60

题解:

思路

①这道题我们for循环把天数总体框架给出,然后处理每一天的信息,开始输入每一本书的信息,在while循环里处理今天所有的书籍信息。
②把借书时间全部换算成分钟,注意标记每一次借书,避免掉有借无还和有还无借的情况,再借书后标记为1,还书后再置为0
③如果借书超过1本,平均时长可能会有小数出现,所以我们转换成float类型,并且用%.0f(四舍五入)打印

#include <stdio.h>
int main()
{
	int n, num, h, m;
	char s;
	int arr[1005][5];
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		int count = 0, t = 0;
		scanf("%d %c %d:%d", &num, &s, &h, &m);
		while (num)
		{
			if (s == 'S')
			{
				arr[num][0] = 1;//已借出
				arr[num][1] = h * 60 + m;//当前时间
			}
			if (s == 'E' && arr[num][0] == 1)//防止只还不借情况
			{
				count++;//有换有借才是一次完整借书流程
				//同时防止有借无换,这样我们就不将他计算为一次借书流程
				t += h * 60 + m - arr[num][1];//总看书时长
				arr[num][0] = 0;
			}
			scanf("%d %c %d:%d", &num, &s, &h, &m);
		}
		if (count <= 1)
		{
			printf("%d %d\n", count, t);
		}
		if (count > 1)
		{
			printf("%d %.0f\n", count, (float)t / count);
		}
	}
	return 0;
}

L1-044 稳赢

分数 15

作者 陈越

单位 浙江大学

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

输入格式:

输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。

输出格式:

对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

输入样例:

2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End

输出样例:

Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu

题解:

#include<stdio.h>
#include<string.h>
int main(){
    int k;
    scanf("%d",&k);
    char a[10];
    int count = 0;
    while(scanf("%s",a)!= EOF){
        if(strcmp(a, "End") == 0)
            break;
        if(count == k)
        {
            printf("%s\n", a);
            count = 0;
        }else
        {
            if (a[0] == 'C'){
                printf("Bu\n");
                count++;
            }
            if (a[0] == 'B'){
                printf("JianDao\n");
                count++;
            }
            if (a[0] == 'J'){
                printf("ChuiZi\n");
                count++;
            }
        }
    }
}

L1-045 宇宙无敌大招呼

分数 5

作者 陈越

单位 浙江大学

据说所有程序员学习的第一个程序都是在屏幕上输出一句“Hello World”,跟这个世界打个招呼。作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼。

输入格式:

输入在第一行给出一个星球的名字S,是一个由不超过7个英文字母组成的单词,以回车结束。

输出格式:

在一行中输出Hello S,跟输入的S星球打个招呼。

输入样例:

Mars

输出样例:

Hello Mars

题解:

#include<stdio.h>
int main(){
    char a[10];
    scanf("%s",&a);
    printf("Hello %s",a);
}

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值