团体程序设计天梯赛-练习集 03

天梯赛题解合集
团体程序设计天梯赛-练习集 (L1-001 - L1-012)
团体程序设计天梯赛-练习集 (L1-013 - L1-024)
团体程序设计天梯赛-练习集 (L1-025 - L1-036)
团体程序设计天梯赛-练习集 (L1-037 - L1-048)

L1-025 正整数A+B 模拟

image-20240401191234069

样例

样例1:

输入

123 456

输出

123 + 456 = 579

样例2:

输入

22. 18

输出

? + 18 = ?

样例3

输入

-100 blabla bla...33

输出

? + ? = ?

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

string str;
int flag_1,flag_2,i,j;

int main(){
	getline(cin,str);
	flag_1=flag_2=0;
	for(i=0;i<str.size();i++) if(str[i]==' ') break; // A和B,其间以空格分开
	for(j=0;j<i;j++){ // 字符转数字A
		flag_1*=10;
		if(str[j]<'0'||str[j]>'9'){ // 不是正整数
			flag_1=0;
			break;
		}
		flag_1+=str[j]-'0';
	}
	for(j=i+1;j<str.size();j++){ // 字符转数字B
		flag_2*=10;
		if(str[j]<'0'||str[j]>'9'){ // 不是正整数
			flag_2=0;
			break;
		}
		flag_2+=str[j]-'0';
	}
	if(flag_1>1000) flag_1=0; // 超出范围
	if(flag_2>1000) flag_2=0; // 超出范围
    if(flag_1&&flag_2) printf("%d + %d = %d",flag_1,flag_2,flag_1+flag_2);
    else if(flag_1) printf("%d + ? = ?",flag_1);
    else if(flag_2) printf("? + %d = ?",flag_2);
    else printf("? + ? = ?");
	return 0;
}

L1-026 I Love GPLT 模拟

image-20240401193156931

样例

输入


输出

I
 
L
o
v
e
 
G
P
L
T

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

int i;
string str;

int main(){
	str="I Love GPLT";
	for(i=0;i<str.size();i++)
		cout<<str[i]<<endl;
	return 0;
}

L1-027 出租 模拟

image-20240401193325012

样例

输入

18013820100

输出

int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

string str;
int i,x,k;
int arr[15],indx[15],dis[15];

int main(){
	getline(cin,str); // 手机号码
	for(i=0;i<str.size();i++){
		x=str[i]-'0';
		if(!dis[x]) dis[x]=1; // 记录出现过的数字
	}
	k=0;
	for(i=9;i>=0;i--) if(dis[i]) arr[k++]=i; // 出现过的数字递减放入arr
	for(i=0;i<k;i++) dis[arr[i]]=i;  // 记录arr中每个数字的位置
	for(i=0;i<str.size();i++) indx[i]=dis[str[i]-'0']; // 将电话号码数字在arr中的位置放入index
		
	printf("int[] arr = new int[]");
	for(i=0;i<k;i++){
		if(i==0) printf("{%d",arr[i]);
		else printf(",%d",arr[i]);
	}
	printf("};\n");
	printf("int[] index = new int[]");
	for(i=0;i<str.size();i++) {
		if(i==0) printf("{%d",indx[i]);
		else printf(",%d",indx[i]);
	}
	printf("};\n");
	return 0;
}

L1-028 判断素数 数论-素数

image-20240401195753424

样例

输入

2
11
111

输出

Yes
No

思路

image-20240401200917927

Ac代码

#include<bits/stdc++.h>
using namespace std;

int n,a,i,flag;

int main(){
	scanf("%d",&n);
	while(n--){
		scanf("%d",&a);
        flag = 0;
    	if (a < 2) flag = 1;
        for(i = 2 ; i<=sqrt(a) ; i ++) if(a%i==0){ flag = 1; break; }
        if(flag) cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
	}
}

L1-029 是不是太胖了 模拟

image-20240402141706816

样例

输入

169

输出

124.2

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

int n;
double ans;

int main(){
	scanf("%d",&n);
	ans=(n-100)*1.8;
	printf("%.1lf\n",ans);
	return 0;
}

L1-030 一帮一 模拟

image-20240402141759813

样例

输入

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出

Amy Jack
Tom Linda
Bill Maya
Cindy John

思路

按照题面模拟即可,用不同变量标记还未安排的最后一位女生和男生的索引

Ac代码

#include<bits/stdc++.h>
using namespace std;

int n,i,p0,p1;
int num[55];
string s;
vector<string> str;

int main(){
	scanf("%d",&n); // 全班学生的人数
	for(i=0;i<n;i++){
		cin>>num[i]>>s; // 性别和姓名
		getchar(); // 吸收空格
		str.push_back(s);
		if(num[i]==0) p0=i; // 最后一位女生索引
		if(num[i]==1) p1=i; // 最后一位男生索引
	}
	
	for(i=0;i<n/2;i++){
		cout<<str[i]<<" ";
		if(num[i]==0) {
			cout<<str[p1--];
			while(num[p1]!=1) p1--; // 前一位男生索引
		}
		else{
			cout<<str[p0--];
			while(num[p0]!=0) p0--; // 前一位女生索引
		}
		cout<<endl;
	}
	return 0;
}

L1-031 到底是不是太胖了 模拟

image-20240402142327489

样例

输入

3
169 136
150 81
178 155

输出

You are wan mei!
You are tai shou le!
You are tai pang le!

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

int n,h,w;

int main(){
	scanf("%d",&n);
	while(n--){
		scanf("%d%d",&h,&w);
		if(fabs(w-(h-100)*1.8)<(h-100)*0.18) 
			printf("You are wan mei!\n");
		else{
			if(w>(h-100)*1.8)
				printf("You are tai pang le!\n");
			else 
				printf("You are tai shou le!\n");
		}
	}
	return 0;
}

L1-032 Left-pad 模拟

bjHbVA.png

样例

样例1:

输入

15 _
I love GPLT

输出

____I love GPLT

样例2:

输入

4 *
this is a sample for cut

输出

 cut

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

int n,i;
char c;
string str;

int main(){
	scanf("%d %c",&n,&c); // 分别是填充结果字符串的长度和用于填充的字符
	getchar(); // 吸收空格
	getline(cin,str); // 原始的非空字符串
	if(str.size()<=n){ // 原始字符串长度小于n 用字符c填充
		for(i=0;i<n-str.size();i++) cout<<c;
		cout<<str<<endl;
	}
	else{ // 原始字符串长度大于n 
		for(i=str.size()-n;i<str.size();i++) cout<<str[i];
		cout<<endl;
	}
	return 0;
}

L1-033 出生年 模拟

image-20240402142410938

样例

样例1:

输入

1988 4

输出

25 2013

样例2:

输入

1 2

输出

0 0001

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

int y,n,i,j,k,sum;
bool num[15];

int main(){
	scanf("%d%d",&y,&n);
	for(i=y;;i++){
		for(j=0;j<=9;j++) num[j]=false; // 初始化 每个数字都标记为没出现过
		k=i;
		if(k<1000) num[0]=true;
		while(k){
			num[k%10]=true; // 记录每一位数字
			k/=10;
		}
		sum=0;
		for(j=0;j<=9;j++) 
			if(num[j]) sum++; // 记录不同数字个数
		if(sum==n) break;
	}
	printf("%d %04d\n",i-y,i);
	return 0;
} 

L1-034 点赞 模拟

bjbrJP.png

样例

输入

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

输出

233 3

思路

按照题面模拟即可,找到出现次数最多的数字

Ac代码

#include<bits/stdc++.h>
using namespace std;

int n,m,x,maxid,maxx,i;
int num[1005];

int main(){
	scanf("%d",&n); // 该用户点赞的博文数量
	while(n--){
		scanf("%d",&m);
		while(m--){
			scanf("%d",&x);
			num[x]++; // 记录每个编号出现次数
		}
	}
	maxid=0,maxx=num[0];
	for(i=1;i<=1000;i++){
		if(num[i]>=maxx){ // 更新出现次数最多的编号
			maxx=num[i];
			maxid=i;
		}
	}
	printf("%d %d\n",maxid,maxx);
	return 0;
} 

L1-035 情人节 模拟

image-20240402143106552

样例

样例1:

输入

GaoXZh
Magi
Einst
Quark
LaoLao
FatMouse
ZhaShen
fantacy
latesum
SenSen
QuanQuan
whatever
whenever
Potaty
hahaha
.

输出

Magi and Potaty are inviting you to dinner...

样例2:

输入

LaoLao
FatMouse
whoever
.

输出

FatMouse is the only one for you...

样例3:

输入

LaoLao
.

输出

Momo... No one is for you ...

思路

按照题面模拟即可,先判断14再判断2

Ac代码

#include<bits/stdc++.h>
using namespace std;

string s;
vector<string> str;

int main(){
	getline(cin,s);
	while(s.compare(".")!=0){
		str.push_back(s);
		getline(cin,s);
	}
	if(str.size()>=14)
		cout<<str[1]<<" and "<<str[13]<<" are inviting you to dinner..."<<endl;
	else if(str.size()>=2)
		cout<<str[1]<<" is the only one for you..."<<endl;
	else 
		cout<<"Momo... No one is for you ..."<<endl;
	return 0;
} 

L1-036 A乘以B 模拟

image-20240402143937296

样例

输入

-8 13

输出

-104

思路

按照题面模拟即可

Ac代码

#include<bits/stdc++.h>
using namespace std;

int a,b;

int main(){
	cin>>a>>b;
	cout<<a*b<<endl;
	return 0;
} 
  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温柔说给风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值