GPLT团体程序设计天梯赛-练习集 L1-051~L1-060

L1-051 打折 (5 分)


去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥\(988\),标明打 \(7\) 折,则折扣价应该是 ¥\(988 \times 70\% =\)\(691.60\)。本题就请你写个程序替客户计算折扣价。


输入格式

输入在一行中给出商品的原价(不超过\(1\)万元的正整数)和折扣(为\([1, 9]\)区间内的整数),其间以空格分隔。


输出格式

在一行中输出商品的折扣价,保留小数点后 \(2\) 位。


输入样例

988 7

输出样例

691.60

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<cstdio>
using namespace std;
int main(){
	double C,R;
	scanf("%lf %lf",&C,&R);
	printf("%.2lf",C*R/10);
	return 0;
}






L1-052 2018我们要赢 (5 分)


2018年天梯赛的注册邀请码是“2018wmyy”,意思就是“2018我们要赢”。本题就请你用汉语拼音输出这句话。


输入格式

本题没有输入。


输出格式

在第一行中输出:“2018”;第二行中输出:“wo3 men2 yao4 ying2 !”。


输入样例


输出样例

2018
wo3 men2 yao4 ying2 !

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<cstdio>
using namespace std;
int main(){
	printf("2018\nwo3 men2 yao4 ying2 !");
	return 0;
}






L1-053 电子汪 (10 分)


据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。

本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。


输入格式

输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。


输出格式

在一行中输出 A + B 个Wang!


输入样例

2 1

输出样例

Wang!Wang!Wang!

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<cstdio>
using namespace std;
int main(){
	int a,b;
	scanf("%d %d",&a,&b);
	for(int i=1;i<=a+b;++i) printf("Wang!");
	return 0;
}






L1-054 福到了 (15 分)


“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 \(N × N\) 的网格组成的,网格中的元素或者为字符 @ 或者为空格。而倒过来的汉字所用的字符由裁判指定。


输入格式

输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 \(N\) (不超过\(100\)的正整数),其间以 \(1\) 个空格分隔;随后 \(N\) 行,每行给出 \(N\) 个字符,或者为 @ 或者为空格。


输出格式

输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出bu yong dao le,然后再用输入指定的字符将其输出。


输入样例 1

$ 9
 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
 @  @@@@@

输出样例 1

$$$$$  $ 
$ $ $  $ 
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
 $$$  $$$
 $ $   $ 
 $$$  $$$
$$$$$  $ 

输入样例 2

& 3
@@@
 @ 
@@@

输出样例 2

bu yong dao le
&&&
 & 
&&&

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



  • 本题我原先使用了scanf("%d\n",&n),结果居然格式错误了,看来这么使用是不保险的;

PZ.cpp

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
string C,s[105],ans[105];
int n;
bool check(){
	for(int i=1;i<=n;++i)
		for(int j=0;j<s[i].size();++j)
			if(s[i][j]!=ans[i][j]) return 0;
	return 1;
}
int main(){
	cin>>C; scanf("%d",&n); getchar();
	for(int i=1;i<=n;++i) getline(cin,s[i]);
	for(int i=1;i<=n;++i){
		reverse(s[n-i+1].begin(),s[n-i+1].end());
		ans[i]=s[n-i+1];
		reverse(s[n-i+1].begin(),s[n-i+1].end());
	}
	if(check()) puts("bu yong dao le");
	for(int i=1;i<=n;++i){
		for(int j=0;j<ans[i].size();++j)
			if(ans[i][j]=='@') cout<<C;
			else cout<<" ";
		puts("");
	}
	return 0;
}






L1-055 谁是赢家 (10 分)


某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 \(3\) 名评委投票两部分共同决定。规则为:如果一位艺人的观众票数高,且得到至少 \(1\) 名评委的认可,该艺人就胜出;或艺人的观众票数低,但得到全部评委的认可,也可以胜出。节目保证投票的观众人数为奇数,所以不存在平票的情况。本题就请你用程序判断谁是赢家。


输入格式

输入第一行给出 \(2\) 个不超过 \(1000\) 的正整数 \(P_a\)\(P_b\),分别是艺人 \(a\) 和艺人 \(b\) 得到的观众票数。题目保证这两个数字不相等。随后第二行给出 \(3\) 名评委的投票结果。数字 \(0\) 代表投票给 \(a\),数字 \(1\) 代表投票给 \(b\),其间以一个空格分隔。


输出格式

按以下格式输出赢家:

The winner is x: P1 + P2

其中 x 是代表赢家的字母,P1 是赢家得到的观众票数,P2 是赢家得到的评委票数。


输入样例

327 129
1 0 1

输出样例

The winner is a: 327 + 1

鸣谢安阳师范学院软件学院李栋同学完善测试数据。


作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int Pa,Pb,Ta,Tb,a,b,c;
int main(){
	scanf("%d %d %d %d %d",&Pa,&Pb,&a,&b,&c);
	if(a) ++Tb; else ++Ta;
	if(b) ++Tb; else ++Ta;
	if(c) ++Tb; else ++Ta;
	if(Pa>Pb && Ta) printf("The winner is a: %d + %d",Pa,Ta);
	else if(Pb>Pa && Tb) printf("The winner is b: %d + %d",Pb,Tb);
	else if(Pa<Pb && Ta==3) printf("The winner is a: %d + %d",Pa,Ta);
	else if(Pb<Pa && Tb==3) printf("The winner is b: %d + %d",Pb,Tb);
	return 0;
}






L1-056 猜数字 (20 分)


一群人坐在一起,每人猜一个 \(100\) 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。


输入格式

输入在第一行给出一个正整数\(N(≤104)\)。随后 \(N\) 行,每行给出一个玩家的名字(由不超过\(8\)个英文字母组成的字符串)和其猜的正整数(\(≤ 100\))。


输出格式

在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。


输入样例

7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62

输出样例

22 Amy

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
int n;
map<int,string>mp;
bool vis[105];
string LName,RName;
int Lnum,Rnum,sum;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		string Name; 
		int num;
		cin>>Name>>num;
		mp[num]=Name;
		vis[num]=1;
		sum+=num;
		
	}
	sum/=n*2;
	cout<<sum<<" ";
	for(int i=sum;i<=100;++i)
		if(vis[i]){
			Rnum=i,RName=mp[i];
			break;
		}
	for(int i=sum;i>=1;--i)
		if(vis[i]){
			Lnum=i,LName=mp[i];
			break;
		}
	if(sum-Lnum>sum-Rnum) cout<<RName;
	else cout<<LName;
	return 0;
}






L1-057 PTA使我精神焕发 (5 分)


以上是湖北经济学院同学的大作。本题就请你用汉语拼音输出这句话。


输入格式

本题没有输入。


输出格式

在一行中按照样例输出,以惊叹号结尾。


输入样例


输出样例

PTA shi3 wo3 jing1 shen2 huan4 fa1 !

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<cstdio>
using namespace std;
int main(){
	printf("PTA shi3 wo3 jing1 shen2 huan4 fa1 !");
	return 0;
}






L1-058 6翻了 (15 分)


“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!

本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。


输入格式

输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。


输出格式

从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。


输入样例

it is so 666 really 6666 what else can I say 6666666666

输出样例

it is so 666 really 9 what else can I say 27

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<iostream>
#include<cstring>
using namespace std;
int cnt;
string s;
void check(){
	if(0<cnt&&cnt<=3)
		for(int j=1;j<=cnt;++j) cout<<"6";
	if(3<cnt&&cnt<=9) cout<<"9";
	if(cnt>9) cout<<"27";
	cnt=0;
}
int main(){
	getline(cin,s);
	for(int i=0;i<s.size();++i){
		if(s[i]!='6') check(),cout<<s[i];
		else ++cnt;
	}
	if(s[s.size()-1]=='6') check();
	return 0;
}






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

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<iostream>
#include<cstring>
using namespace std;
int n,p,cnt;
bool f;
string s[105];
int main(){
	scanf("%d",&n); getchar();
	for(int i=1;i<=n;++i){
		p=f=cnt=0;
		while(1){
			cin>>s[p++];
			if(f) ++cnt;
			int len=s[p-1].size();
			if(len>=4 && s[p-1][len-1]==',' && s[p-1][len-2]=='g' && s[p-1][len-3]=='n' && s[p-1][len-4]=='o') f=1;
			if(len>=4 && cnt>=3 && s[p-1][len-1]=='.' && s[p-1][len-2]=='g' && s[p-1][len-3]=='n' && s[p-1][len-4]=='o'){
				for(int j=0;j<p-3;++j) cout<<s[j]<<" ";
				cout<<"qiao ben zhong.\n";
				break;
			}
			if(s[p-1][len-1]=='.'){
				puts("Skipped");
				break;
			}
		}
	}
	return 0;
}






L1-060 心理阴影面积 (5 分)


这是一幅心理阴影面积图。我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线)。由红、蓝线围出的面积,就是我们在做作业时的心理阴影面积。

现给出红色拐点的坐标 \((x,y)\),要求你算出这个心理阴影面积。


输入格式

输入在一行中给出 \(2\) 个不超过 \(100\) 的正整数 \(x\)\(y\),并且保证有 \(x>y\)。这里假设横、纵坐标的最大值(即截止日和最终完成度)都是 \(100\)


输出格式

在一行中输出心理阴影面积。

友情提醒:\(三角形的面积 = 底边长 x 高 / 2\)\(矩形面积 = 底边长 x 高\)。嫑想得太复杂,这是一道 \(5\) 分考减法的题……


输入样例

90 10

输出样例

4000

作者:陈越
单位:浙江大学
代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB



PZ.cpp

#include<cstdio>
using namespace std;
int main(){
	int x,y;
	scanf("%d %d",&x,&y);
	printf("%d",100*100/2-y*100/2-100*(100-x)/2);
	return 0;
}
posted @ 2021-03-31 21:15  PotremZ  阅读(602)  评论(0编辑  收藏  举报