团体程序设计天梯赛-练习集L1篇⑦


题目汇总

  • 题解
    • L1-061 新胖子公式
    • L1-062 幸运彩票
    • L1-063 吃鱼还是吃肉
    • L1-064 估值一亿的AI核心代码
    • L1-065 嫑废话上代码
    • L1-066 猫是液体
    • L1-067 洛希极限
    • L1-068 调和平均
    • L1-069 胎压监测
    • L1-070 吃火锅
  • 写在最后

题解

L1-061 新胖子公式

根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。

输入格式:
输入在一行中给出两个正数,依次为一个人的体重(以 kg 为单位)和身高(以 m 为单位),其间以空格分隔。其中体重不超过 1000 kg,身高不超过 3.0 m。

输出格式:
首先输出将该人的体重和身高代入肥胖公式的计算结果,保留小数点后 1 位。如果这个数值大于 25,就在第二行输出 PANG,否则输出 Hai Xing。

输入样例 1:
100.1 1.74
输出样例 1:
33.1
PANG
输入样例 2:
65 1.70
输出样例 2:
22.5
Hai Xing

#include<iostream>
#include<cmath>
using namespace std;
int main()
{double weight,hight;cin>>weight>>hight;double judge=weight/pow(hight,2);printf("%.1lf\n",judge);if(judge>25)cout<<"PANG";elsecout<<"Hai Xing";
}

L1-062 幸运彩票

彩票的号码有 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<bits/stdc++.h>
using namespace std;
int main()
{int n, i, j, sum1, sum2;string s;scanf("%d", &n);for (i = 0; i < n; i++){cin>>s;sum1 = 0, sum2 = 0;for (j = 0; j < 3; j++){sum1 += s[j]-'0';}for (j = 3; j < 6; j++){sum2 +=s[j]-'0' ;}if (sum1 == sum2)printf("You are lucky!\n");elseprintf("Wish you good luck.\n");}return 0;
}

L1-063 吃鱼还是吃肉


国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。

现在你要根据小宝宝的身高体重,给出补充营养的建议。

输入格式:
输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出一位宝宝的身体数据:

性别 身高 体重
其中性别是 1 表示男生,0 表示女生。身高和体重都是不超过 200 的正整数。

输出格式:
对于每一位宝宝,在一行中给出你的建议:

如果太矮了,输出:duo chi yu!(多吃鱼);
如果太瘦了,输出:duo chi rou!(多吃肉);
如果正标准,输出:wan mei!(完美);
如果太高了,输出:ni li hai!(你厉害);
如果太胖了,输出:shao chi rou!(少吃肉)。
先评价身高,再评价体重。两句话之间要有 1 个空格。

输入样例:
4
0 130 23
1 129 27
1 130 30
0 128 27
输出样例:
ni li hai! duo chi rou!
duo chi yu! wan mei!
wan mei! shao chi rou!
duo chi yu! shao chi rou!

#include<iostream>
using namespace std;
int main()
{int n;cin>>n;int sex,hight,weight;for(int i=1;i<=n;i++){cin>>sex>>hight>>weight;if(sex==0){if(hight<129)cout<<"duo chi yu!"<<" ";else {if(hight==129)cout<<"wan mei!"<<" ";elsecout<<"ni li hai!"<<" ";}           if(weight<25)cout<<"duo chi rou!";else{if(weight==25)cout<<"wan mei!";elsecout<<"shao chi rou!";}cout<<endl;              }if(sex==1){if(hight<130)cout<<"duo chi yu!"<<" ";else {if(hight==130)cout<<"wan mei!"<<" ";elsecout<<"ni li hai!"<<" ";}       if(weight<27)cout<<"duo chi rou!";else {if(weight==27)cout<<"wan mei!";elsecout<<"shao chi rou!";}cout<<endl;                              }}
}

L1-064 估值一亿的AI核心代码


以上图片来自新浪微博。

本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

无论用户说什么,首先把对方说的话在一行中原样打印出来;
消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
把原文中所有大写英文字母变成小写,除了 I;
把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;
把原文中所有独立的 I 和 me 换成 you;
把原文中所有的问号 ? 换成惊叹号 !;
在一行中输出替换后的句子作为 AI 的回答。
输入格式:
输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

输出格式:
按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。

输入样例:
6
Hello ?
Good to chat with you
can you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know
输出样例:
Hello ?
AI: hello!
Good to chat with you
AI: good to chat with you
can you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don’t know

#include<bits/stdc++.h>
using namespace std;bool If(char c)
{if(c == '0')return false;if(c >='a' && c<='z')return false;if(c >= 'A' && c <= 'Z')return false;if(c >='0' && c <= '9')return false;return true;
}string replace(string s1,string s2,string s3)
{for(int i=0;;i++){int l=s1.find(s2,i), r = l + s2.size()-1;if(l == -1)break;if(l == 0 && (s1[r+1] == ' ' || If(s1[r+1]))){s1.replace(l, r-l+1,s3);}		else if(r == s1.size() -1 && (s1[l - 1]==' ' || If(s1[l - 1]))){s1.replace(l, r-l+1,s3); }else if((s1[r+ 1]==' '|| If(s1[r+1]))&&(s1[l -1] == ' '|| If(s1[l-1]))){s1.replace(l, r-l+1,s3);}}return s1;}
int main()
{int n;cin>>n;getchar();while(n--){string s;getline(cin,s);cout<<s<<endl;	for(int i=0;i<s.size();i++){if(s[i]==' '){int j=i;while(j+1 < s.size()&& s[j+1] == ' ')j++;s.erase(i,j - i);i=j;}}if(s.size()!=0 && s[0]== ' ')s.erase(0,1);if(s.size()!=0 && s[s.size() - 1]==' ')s.erase(s.size() -1,1);for(int i=1;i < s.size();i++){if(If(s[i])&&s[i-1]==' '){s.erase(i - 1,1);i--;}}for(int i=0;i < s.size();i++){if(s[i] >= 'A' && s[i] <= 'Z' && s[i]!='I')s[i] +='a' - 'A';}s = replace(s,"can you","A can");s = replace(s,"could you","A could");s = replace(s,"I","you");s = replace(s, "me","you");for(int i=0;i < s.size();i++){if(s[i] == '?')s[i]='!';if(s[i]=='A')s[i]='I';}cout<<"AI: "<<s<<endl;}return 0;
}

L1-065 嫑废话上代码

Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。

输入格式:
本题没有输入。

输出格式:
在一行中输出 Talk is cheap. Show me the code.。

输入样例:

输出样例:
Talk is cheap. Show me the code.

#include<iostream>
using namespace std;
int main()
{cout<<"Talk is cheap. Show me the code.";
}

L1-066 猫是液体


测量一个人的体积是很难的,但猫就不一样了。因为猫是液体,所以可以很容易地通过测量一个长方体容器的容积来得到容器里猫的体积。本题就请你完成这个计算。

输入格式:
输入在第一行中给出 3 个不超过 100 的正整数,分别对应容器的长、宽、高。

输出格式:
在一行中输出猫的体积。

输入样例:
23 15 20
输出样例:
6900

#include<iostream>
using namespace std;
int main()
{int a,b,c;cin>>a>>b>>c;cout<<a*b*c;
}

L1-067 洛希极限

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木“刚体洛希极限”,地球面临被彻底撕碎的危险。但实际上,这个计算是错误的。

洛希极限(Roche limit)是一个天体自身的引力与第二个天体造成的潮汐力相等时的距离。当两个天体的距离少于洛希极限,天体就会倾向碎散,继而成为第二个天体的环。它以首位计算这个极限的人爱德华·洛希命名。(摘自百度百科)

大天体密度与小天体的密度的比值开 3 次方后,再乘以大天体的半径以及一个倍数(流体对应的倍数是 2.455,刚体对应的倍数是 1.26),就是洛希极限的值。例如木星与地球的密度比值开 3 次方是 0.622,如果假设地球是流体,那么洛希极限就是 0.622×2.455=1.52701 倍木星半径;但地球是刚体,对应的洛希极限是 0.622×1.26=0.78372 倍木星半径,这个距离比木星半径小,即只有当地球位于木星内部的时候才会被撕碎,换言之,就是地球不可能被撕碎。

本题就请你判断一个小天体会不会被一个大天体撕碎。

输入格式:
输入在一行中给出 3 个数字,依次为:大天体密度与小天体的密度的比值开 3 次方后计算出的值(≤1)、小天体的属性(0 表示流体、1 表示刚体)、两个天体的距离与大天体半径的比值(>1 但不超过 10)。

输出格式:
在一行中首先输出小天体的洛希极限与大天体半径的比值(输出小数点后2位);随后空一格;最后输出 _ 如果小天体不会被撕碎,否则输出 T_T。

输入样例 1:
0.622 0 1.4
输出样例 1:
1.53 T_T
输入样例 2:
0.622 1 1.4
输出样例 2:
0.78 _

#include<iostream>
using namespace std;
int main()
{double a,b,c;int n;cin>>a>>n>>b;if(n==0){c=a*2.455;printf("%.2lf ",c);}else{c=a*1.26;printf("%.2lf ",c);}if(c>b)printf("T_T");elseprintf("^_^");}

L1-068 调和平均

N 个正数的算数平均是这些数的和除以 N,它们的调和平均是它们倒数的算数平均的倒数。本题就请你计算给定的一系列正数的调和平均值。

输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N (≤1000);第 2 行给出 N 个正数,都在区间 [0.1,100] 内。

输出格式:
在一行中输出给定数列的调和平均值,输出小数点后2位。

输入样例:
8
10 15 12.7 0.3 4 13 1 15.6
输出样例:
1.61

#include<iostream>
using namespace std;
int main()
{int n;cin>>n;double num,sum=0;for(int i=1;i<=n;i++){cin>>num;sum+=1/num;}printf("%.2lf",1/(sum/n));
}

L1-069 胎压监测

小轿车中有一个系统随时监测四个车轮的胎压,如果四轮胎压不是很平衡,则可能对行车造成严重的影响。

让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序,随时监测四轮的胎压,并给出正确的报警信息。报警规则如下:

如果所有轮胎的压力值与它们中的最大值误差在一个给定阈值内,并且都不低于系统设定的最低报警胎压,则说明情况正常,不报警;
如果存在一个轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则不仅要报警,而且要给出可能漏气的轮胎的准确位置;
如果存在两个或两个以上轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则报警要求检查所有轮胎。
输入格式:
输入在一行中给出 6 个 [0, 400] 范围内的整数,依次为 1~4 号轮胎的胎压、最低报警胎压、以及胎压差的阈值。

输出格式:
根据输入的胎压值给出对应信息:

如果不用报警,输出 Normal;
如果有一个轮胎需要报警,输出 Warning: please check #X!,其中 X 是出问题的轮胎的编号;
如果需要检查所有轮胎,输出 Warning: please check all the tires!。
输入样例 1:
242 251 231 248 230 20
输出样例 1:
Normal
输入样例 2:
242 251 232 248 230 10
输出样例 2:
Warning: please check #3!
输入样例 3:
240 251 232 248 240 10
输出样例 3:
Warning: please check all the tires!

#include<bits/stdc++.h>
using namespace std;
int main() {int a[101],minb,fa;int max1=0;int flag=0,count=0;for(int i=0; i<4; ++i) {cin >> a[i];max1 = max(max1,a[i]);}cin >> minb >> fa;for(int i=0; i<4; ++i) {if(a[i] < minb || (max1-a[i]) > fa){flag=i+1;count++;}}if(count == 0) {cout << "Normal";} else if(count == 1) {printf("Warning: please check #%d!",flag);} else {cout << "Warning: please check all the tires!";}
}

L1-070 吃火锅


以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。

本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。

输入格式:
输入每行给出一句不超过 80 个字符的、以回车结尾的朋友信息,信息为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。当读到某一行只有一个英文句点 . 时,输入结束,此行不算在朋友信息里。

输出格式:
首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含 chi1 huo3 guo1,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现 chi1 huo3 guo1 的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。

如果朋友从头到尾都没提 chi1 huo3 guo1 这个关键词,则在第二行输出一个表情 -_-#。

输入样例 1:
Hello!
are you there?
wantta chi1 huo3 guo1?
that’s so li hai le
our story begins from chi1 huo3 guo1 le
.
输出样例 1:
5
3 2
输入样例 2:
Hello!
are you there?
wantta qi huo3 guo1 chi1huo3guo1?
that’s so li hai le
our story begins from ci1 huo4 guo2 le
.
输出样例 2:
5
-_-#

#include<bits/stdc++.h>
using namespace std;
int main()
{string s,s1="chi1 huo3 guo1";int count1=0,count2=0;int flag=0;int i=1;int judge=1;while(1){getline(cin,s);if(s==".")break;count1++;if(s.find(s1)!=-1){if(judge){flag=i;judge=0;}count2++;}i++;			}cout<<count1<<endl;if(count2==0)cout<<"-_-#"<<endl;elsecout<<flag<<" "<<count2<<endl;
}

写在最后

🍁🍁🍁好啦,本文的内容就到此结束啦,我们下期再见哦!另外在祝各位小伙伴们要天天开心哦!
🍂🍂🍂如果你觉得本文对你有帮助的话,还请不要吝惜您的三连哦!您的支持就是我创作的最大动力!!爱你们💕💕💕

本文链接:https://my.lmcjl.com/post/13580.html

展开阅读全文

4 评论

留下您的评论.