天梯赛题解合集
团体程序设计天梯赛-练习集 (L1-001 - L1-012)
团体程序设计天梯赛-练习集 (L1-013 - L1-024)
团体程序设计天梯赛-练习集 (L1-025 - L1-036)
团体程序设计天梯赛-练习集 (L1-037 - L1-048)
L1-001 Hello World 输出题
样例
输入
输出
Hello World!
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"Hello World!"<<endl;
return 0;
}
L1-002 打印沙漏 模拟
样例
输入
19 *
输出
*****
***
*
***
*****
2
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=30;
int a[N],sum[N];
int i,j,n,id;
char c;
int main(){
//初始化
a[1]=1,a[2]=6;
for(i=3;i<=25;i++) a[i]=a[i-1]+4;
sum[1]=1;
for(i=2;i<=25;i++) sum[i]=sum[i-1]+a[i];
//计算
scanf("%d %c",&n,&c);
for(i=1;i<=25;i++) if(sum[i]>n) break;
id=i-1;
//打印
for(i=id;i>=1;i--){//上半部分
//空格
for(j=id-i;j>0;j--) printf(" ");
//字符
for(j=0;j<i*2-1;j++) printf("%c",c);
cout<<endl;
}
for(i=2;i<=id;i++){//下半部分
//空格
for(j=id-i;j>0;j--) printf(" ");
//字符
for(j=0;j<i*2-1;j++) printf("%c",c);
cout<<endl;
}
printf("%d\n",n-sum[id]);
}
L1-003 个位数统计 模拟
样例
输入
100311
输出
0:2
1:3
3:1
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
string str;
int num[15];
int main(){
cin>>str;
for(int i=0; i<str.size();i++) num[str[i]-'0']++;
for(int i=0;i<10;i++) if(num[i])
cout<<i<<":"<<num[i]<<endl;
return 0;
}
L1-004 计算摄氏温度 模拟
样例
输入
150
输出
Celsius = 65
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
int f,ans;
int main(){
scanf("%d",&f); // 输入华氏温度
ans=5*(f-32)/9; // 转换为摄氏温度
printf("Celsius = %d\n",ans);
return 0;
}
L1-005 考试座位号 模拟
样例
输入
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出
3310120150912002 2
3310120150912119 1
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
long long n,m,zkz,sj,ks;
long long dis[N*2];
int main(){
scanf("%lld",&n); // 学生个数
while(n--){
scanf("%lld%lld%lld",&zkz,&sj,&ks); // 一个考生的信息:准考证号 试机座位号 考试座位号
dis[sj]=ks;
dis[sj+N]=zkz;
}
scanf("%lld",&m);
while(m--){
scanf("%lld",&sj);
printf("%lld %lld\n",dis[sj+N],dis[sj]);
}
return 0;
}
L1-006 连续因子 模拟
样例
输入
630
输出
3
5*6*7
思路
找到一个数的最长连续因子区间
Ac代码
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long ansl=1,ansr=1,p,q;
int main(){
scanf("%lld",&n); // 正整数 N
for(p=2;p<=sqrt(n);p++){ // 暴力求解
m=n,q=p;
while(m%q==0){
m/=q;
q++;
}
if(ansr-ansl<q-p) ansl=p,ansr=q; // 更新最长连续因子
}
if(ansr-ansl>0){
printf("%lld\n",ansr-ansl);
for(p=ansl;p<ansr;p++){
printf("%lld",p);
if(p==ansr-1) printf("\n");
else printf("*");
}
}
else cout<<"1"<<endl<<n;
return 0;
}
L1-007 念数字 模拟
样例
输入
-600
输出
-600
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
string str;
int i;
int main(){
getline(cin,str);
for(i=0;i<str.size();i++){
if(i>0) printf(" ");
if(str[i]=='-') printf("fu");
if(str[i]=='0') printf("ling");
if(str[i]=='1') printf("yi");
if(str[i]=='2') printf("er");
if(str[i]=='3') printf("san");
if(str[i]=='4') printf("si");
if(str[i]=='5') printf("wu");
if(str[i]=='6') printf("liu");
if(str[i]=='7') printf("qi");
if(str[i]=='8') printf("ba");
if(str[i]=='9') printf("jiu");
}
cout<<endl;
return 0;
}
L1-008 求整数段和 模拟
样例
输入
-3 8
输出
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int a,b,k,sum=0;
int main(){
scanf("%d%d",&a,&b);
k=1;
for(int i=a;i<=b;i++){ // 顺序输出从A到B的所有整数
printf("%5d",i); // 每个数字占5个字符宽度
if(k%5==0) printf("\n"); // 每5个数字占一行
k++;
sum+=i;
}
if((k-1)%5!=0) printf("\n"); 最后一行没满5个也换行
printf("Sum = %d\n",sum);
return 0;
}
L1-009 N个数求和 gcd
样例
样例1:
输入
5
2/5 4/15 1/30 -2/60 8/3
输出
3 1/3
样例2:
输入
2
4/3 2/3
输出
2
样例3:
输入
3
1/3 -1/6 1/8
输出
7/24
思路
模拟手算,利用__gcd计算最大公约数
Ac代码
#include<bits/stdc++.h>
using namespace std;
int n,fz,fm,FZ=0,FM=1,g;
int main(){
scanf("%d",&n); // 有理数个数
while(n--){
scanf("%d/%d",&fz,&fm); // 有理数的分子和分母
g=__gcd(FM,fm);
FZ=(FZ*fm+FM*fz)/g; // 计算和的分子
FM=FM*fm/g; // // 计算和的分母
}
if(FZ%FM==0) printf("%d\n",FZ/FM); // 没有分数部分
else {
g=FZ/FM;
FZ=FZ%FM;
if (g>0) printf("%d %d/%d\n",g,FZ/__gcd(FZ,FM),FM/__gcd(FZ,FM));
else printf("%d/%d\n",FZ/__gcd(FZ,FM),FM/__gcd(FZ,FM));
}
return 0;
}
L1-010 比较大小
样例
输入
4 2 8
输出
2->4->8
思路
按照题面模拟即可
Ac代码
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int a,b,c,minn,maxx;
int main(){
scanf("%d%d%d",&a,&b,&c);
minn=min(a,(min(b,c)));
maxx=max(a,(max(b,c)));
printf("%d->%d->%d\n",minn,a+b+c-minn-maxx,maxx);
return 0;
}
L1-011 A-B STL-string
样例
输入
I love GPLT! It's a fun game!
aeiou
输出
I lv GPLT! It's fn gm!
思路
从A中删除B中字符,输出A,遍历找到相同字符就删除,string的erase()函数,之后的字符会覆盖被删除的字符,用下标访问时需要注意
Ac代码
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int i,j;
int main(){
getline(cin,s1);
getline(cin,s2);
for(i=0;i<s2.size();i++) //遍历s2
for(j=0;j<s1.size();j++) //遍历s1
while(s1[j]==s2[i]) //删除s1中和s2相同的数据
s1.erase(j,1);
cout<<s1<<endl;
return 0;
}
L1-012 计算指数 快速幂
样例
输入
5
输出
2^5 = 32
思路
Ac代码
#include<bits/stdc++.h>
using namespace std;
int n,ans,base=2;
int main(){
scanf("%d",&n);
printf("2^%d = ",n);
ans=1;
while(n){ // 快速幂
if(n%2) ans*=base;
base*=base;
n/=2;
}
printf("%d\n",ans);
return 0;
}
标签:int,L1,样例,001,012,str,printf,FM
From: https://blog.csdn.net/weixin_45741872/article/details/137236798