天梯赛题解合集
团体程序设计天梯赛-练习集 (L1-001 - L1-012)
团体程序设计天梯赛-练习集 (L1-013 - L1-024)
团体程序设计天梯赛-练习集 (L1-025 - L1-036)
团体程序设计天梯赛-练习集 (L1-037 - L1-048)
L1-025 正整数A+B 模拟
样例
样例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 模拟
样例
输入
输出
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 出租 模拟
样例
输入
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 判断素数 数论-素数
样例
输入
2
11
111
输出
Yes
No
思路
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 是不是太胖了 模拟
样例
输入
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 一帮一 模拟
样例
输入
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 到底是不是太胖了 模拟
样例
输入
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 模拟
样例
样例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 出生年 模拟
样例
样例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 点赞 模拟
样例
输入
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 情人节 模拟
样例
样例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 模拟
样例
输入
-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;
}