目录
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]内的整数) 键值
(S
或E
) 发生时间
(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);
}