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

文章详细介绍了团体程序设计天梯赛中的多个练习题目,涉及阶乘计算、输出特定字符串、模拟操作(如画方块、身份证验证、计数2的个数等),以及特定字符串的处理(如GPLT和后天日期)。
摘要由CSDN通过智能技术生成

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

L1-013 计算阶乘和 阶乘

image-20240401150546127

样例

输入

3

输出

9

思路

在循环求阶乘得过程中计算阶乘的和

Ac代码

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

int jc,n,sum;

int main(){
	scanf("%d",&n);
	jc=1,sum=0;
	for(int i=1;i<=n;i++){
		jc*=i; // i的阶乘
		sum+=jc; // 加上i的阶乘
	}
	printf("%d\n",sum);
	return 0;
}

L1-014 简单题 输出题

image-20240401150508288

样例

输入


输出

This is a simple problem.

思路

Ac代码

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

int main(){
	cout<<"This is a simple problem."<<endl;
	return 0;
} 

L1-015 跟奥巴马一起画方块 模拟

image-20240401150223856

样例

输入

10 a

输出

aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

思路

按照题面模拟即可

Ac代码

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

int n,i,j;
char c;

int main(){
	scanf("%d %c",&n,&c); // 正方形边长N 给定字符C
	for(i=1;i<=(n+1)/2;i++){ // 行数实际上是列数的50%
		for(j=1;j<=n;j++)
			printf("%c",c);
		cout<<endl;
	}
	return 0;
} 

L1-016 查验身份证 模拟

image-20240401145241818

样例

样例1:

输入

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出

12010X198901011234
110108196711301866
37070419881216001X

样例2:

2
320124198808240056
110108196711301862
All passed

思路

按照题面模拟即可

Ac代码

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

int n,sum,i;
string str;
int rig[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};	// 权重
char m[]="10X98765432"; // 校验码
bool flag,f;

int main(){
	scanf("%d",&n); // 身份证号码的个数
	getchar(); // 吸收换行
	flag=true;
	while(n--){
		sum=0;
		getline(cin,str); // 输入1个18位身份证号码
		for(i=0;i<18;i++) sum+=(str[i]-'0')*rig[i]; // 对前17位数字加权求和
		sum%=11; // 对11取模
		if(str[17]!=m[sum]) { // Z值与校验码M的值不匹配
			flag=false;
			cout<<str<<endl;
		}
	}
	if(flag) printf("All passed\n");
	return 0;
} 

L1-017 到底有多二 模拟

image-20240401144456582

样例

输入

-13142223336

输出

81.82%

思路

按照题面模拟即可

Ac代码

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

string str;
int num,num_2,i;			//2的个数 
double flag_1,flag_2,ans;	//分别记录负数和偶数 

int main(){
	getline(cin,str);// 不超过50位的整数 用字符串读取
	num=num_2=0;// 初始化 2的个数 与 位数
	flag_1=flag_2=1;
	for(i=0;i<str.size();i++){
		num++;
		if(str[i]=='-') flag_1=1.5,num--; // 这个数是负数,则程度增加0.5倍
		if(str[i]=='2') num_2++; // 计算2的个数
	} 
	if((str[str.size()-1]-'0')%2==0) flag_2=2; // 是个偶数,则再增加1倍
    ans = (double)num_2/num*flag_1*flag_2;
	printf("%.2lf%\n",ans*100);
}

L1-018 大笨钟 模拟

image-20240401143622488

样例

样例1:

输入

19:05

输出

DangDangDangDangDangDangDangDang

样例2:

输入

07:05

输出

Only 07:05.  Too early to Dang.

思路

按照题面模拟即可

Ac代码

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

int hh,mm,num;
bool flag;

int main(){
	scanf("%d:%d",&hh,&mm);// hh是小时 mm是分钟
	if(hh<12 || (hh==12&&mm==0)) // 午夜00:00到中午12:00期间,笨钟是不敲的
		printf("Only %02d:%02d.  Too early to Dang.\n",hh,mm);
	else{
		num=hh-12;
		if(mm>0) num+=1; // 如果过了整点,就敲下一个整点数
		while(num--) printf("Dang");
		printf("\n"); 
	}
	return 0;
}

L1-019 谁先倒 模拟

image-20240401142626569

样例

输入

1 1
6
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
15 1 1 16

输出

A
1

思路

按照题面模拟即可

Ac代码

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

int maxA,maxB,n;
int Ahan,Ahua,Bhan,Bhua,sum;;
int numA,numB;

int main(){
	scanf("%d%d%d",&maxA,&maxB,&n); // 甲、乙两人的酒量,n轮划拳
	numA=numB=0; // 记录甲、乙两人喝的酒
	while(n--){
		scanf("%d%d%d%d",&Ahan,&Ahua,&Bhan,&Bhua);// 甲喊 甲划 乙喊 乙划
		sum=Ahan+Bhan;// 两人喊出的数字之和
		if(Ahua!=Bhua){// 两人不同输
			if(Ahua==sum) numA++; // 甲输
			if(Bhua==sum) numB++; // 乙输
		}
		if(numA>maxA) { // 甲倒下
            printf("A\n%d\n",numB);
			break;
		}
		if(numB>maxB) { // 乙倒下
            printf("B\n%d\n",numA);
			break;
		}
	}
	return 0;
}

L1-020 帅到没朋友 STL-set

bjh7tS.png

样例

样例1:

输入

3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888

输出

10000 88888 23333

样例2:

输入

3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111

输出

No one is handsome

思路

set存有朋友圈的,count(ID) 查询ID是否有朋友圈。

Ac代码

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

int n,k,m,x,i;
set<int> s,se;
vector<int> v;	// 用于辅助输出

int main(){
	scanf("%d",&n); // 朋友圈的个数
	while(n--){
		scanf("%d",&k); // 朋友圈中的人数
		for(i=0;i<k;i++){
			scanf("%d",&x);
			if(k==1) break;	// 只有一个人的朋友圈=没朋友 
			s.insert(x); // 有朋友的ID都加入s
		}
	}
	scanf("%d",&m); // 待查询的人数
	while(m--){
		scanf("%d",&x); // 待查询的ID
		if(!s.count(x) && !se.count(x)) 
            v.push_back(x); // 没有朋友 并且 没被查询过的ID加入输出列表
        se.insert(x); // 查询过的ID加入se
	}
	if(v.size()==0) printf("No one is handsome\n"); // 输出列表为空
	for(i=0; i<v.size(); i++){// 一定要输出5位数
		if(i<v.size()-1) printf("%05d ",v[i]);
		else printf("%05d\n",v[i]);
	}
	return 0;
}

L1-021 重要的话说三遍 输出题

image-20240401161501703

样例

输入


输出

I'm gonna WIN!
I'm gonna WIN!
I'm gonna WIN!

思路

按照题面模拟即可

Ac代码

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

int main(){
	printf("I'm gonna WIN!\n");
	printf("I'm gonna WIN!\n");
	printf("I'm gonna WIN!");
	return 0;
}

L1-022 奇偶分家 模拟

image-20240401161537480

样例

输入

9
88 74 101 26 15 0 34 22 77

输出

3 6

思路

按照题面模拟即可

Ac代码

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

int n,m;
int num_j,num_o;

int main(){
	scanf("%d",&n);
	num_j=num_o=0;
	while(n--){
		scanf("%d",&m);
		if(m%2==1) num_j++;
		else num_o++;
	}
	printf("%d %d\n",num_j,num_o);
	return 0;
}

L1-023 输出GPLT 模拟

image-20240401161726060

样例

输入

pcTclnGloRgLrtLhgljkLhGFauPewSKgt

输出

GPLTGPLTGLTGLGLL

思路

按照题面模拟即可

Ac代码

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

int i;
int num[5];
string str;

int main(){
	getline(cin,str);
	num[0]=num[1]=num[2]=num[3]=0;
	for(i=0;i<str.size();i++){
		if(str[i]=='G'||str[i]=='g') num[0]++;
		if(str[i]=='P'||str[i]=='p') num[1]++;
		if(str[i]=='L'||str[i]=='l') num[2]++;
		if(str[i]=='T'||str[i]=='t') num[3]++;
	}
	while(num[0]+num[1]+num[2]+num[3]){
		if(num[0]) printf("G"),num[0]--;
		if(num[1]) printf("P"),num[1]--;
		if(num[2]) printf("L"),num[2]--;
		if(num[3]) printf("T"),num[3]--;
	}
	printf("\n");
	return 0;
}

L1-024 后天 模拟

image-20240401161902536

样例

输入

3

输出

5

思路

按照题面模拟即可

Ac代码

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

int n;

int main(){
	scanf("%d",&n);
	if(n+2<=7) printf("%d\n",n+2);
	else printf("%d\n",n-5);
	return 0;
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

温柔说给风

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

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

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

打赏作者

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

抵扣说明:

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

余额充值