L1-023 输出GPLT (20 分)
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
题目代码:
//L1-023 输出GPLT
#include<iostream>
#include<cstring>
#include<algorithm>
#define MAXN 10001
using namespace std;
int main()
{
char str[MAXN];
int book[4]={0};
//G P L T
cin >> str;
for(int i=0;i<strlen(str);i++)
{
if(str[i]=='G'||str[i]=='g')
book[0]++;
else if(str[i]=='P'||str[i]=='p')
book[1]++;
else if(str[i]=='L'||str[i]=='l')
book[2]++;
else if(str[i]=='T'||str[i]=='t')
book[3]++;
}
while(1)
{
if(book[0]>0)
{
cout << "G";
book[0]--;
}
if(book[1]>0)
{
cout << "P";
book[1]--;
}
if(book[2]>0)
{
cout << "L";
book[2]--;
}
if(book[3]>0)
{
cout << "T";
book[3]--;
}
if(book[0]==0&&book[1]==0&&book[2]==0&&book[3]==0)
break;
}
return 0;
}
L1-024 后天 (5 分)
如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。
输入格式:
输入第一行给出一个正整数D
(1 ≤ D
≤ 7),代表星期里的某一天。
输出格式:
在一行中输出D
天的后天是星期几。
输入样例:
3
输出样例:
5
题目代码:
//L1-024 后天
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
if(n==1) cout << "3\n";
else if(n==2) cout << "4\n";
else if(n==3) cout << "5\n";
else if(n==4) cout << "6\n";
else if(n==5) cout << "7\n";
else if(n==6) cout << "1\n";
else cout << "2\n";
return 0;
}
L1-025 正整数A+B (15 分)
题的目标很简单,就是求两个正整数A
和B
的和,其中A
和B
都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出A
和B
,其间以空格分开。问题是A
和B
不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A
和B
的分隔。题目保证至少存在一个空格,并且B
不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式A + B = 和
输出。如果某个输入不合要求,则在相应位置输出?
,显然此时和也是?
。
输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
题目代码:
//L1-025 正整数A+B
#include<iostream>
#include<cstring>
#include<cmath>
#define MAXN 1001
using namespace std;
int main()
{
char A[MAXN],B[MAXN];
int lena,lenb,flaga=1,flagb=1;
cin >> A;
//B字符串 第0个字符是空格 所以从第一个位置开始判断
scanf("%[^\n]",B);
lena=strlen(A);lenb=strlen(B);
// cout << lena <<" " << lenb << endl;
if(lena>=4&&lenb-1<=4)
flaga=0;
if(lena<=4&&lenb-1>=4)
flagb=0;
if(lena>=4&&lenb-1>=4)
{
flaga=0;
flagb=0;
}
if(A[0]=='0')
flaga=0;
if(B[1]=='0')
flagb=0;
// cout << flaga << " " <<flagb <<endl;
for(int i=1;i<lena;i++)
{
if(A[i]<'0'||A[i]>'9')
{
flaga=0;
break;
}
}
for(int i=2;i<lenb;i++)
{
if(B[i]<'0'||B[i]>'9')
{
flagb=0;
break;
}
}
if(lena==4)
if(A[0]=='1'&&A[1]=='0'&&A[2]=='0'&&A[3]=='0')
flaga=1;
if(lenb-1==4)
if(B[1]=='1'&&B[2]=='0'&&B[3]=='0'&&B[4]=='0')
flagb=1;
// cout << flaga << " " <<flagb <<endl;
if(flaga&&flagb)
{
int suma=0,sumb=0;
int j=lena;
for(int i=0;i<lena;i++)
{
j--;
suma+=pow(10,j)*(A[i]-48);
}
j=lenb-1;
for(int i=1;i<lenb;i++)
{
j--;
sumb+=pow(10,j)*(B[i]-48);
}
cout << A << " +" << B << " = " << suma+sumb << endl;
}
if(!flaga&&!flagb)
cout << "? + ? = ?\n";
if(flaga&&!flagb)
cout << A << " + ? = ?\n";
if(!flaga&&flagb)
cout << "? +" << B << " = ?\n";
return 0;
}
L1-026 I Love GPLT (5 分)
这道超级简单的题目没有任何输入。
你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了。
所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。
输入样例:
无
输出样例:
I
L
o
v
e
G
P
L
T
题目代码:
#include <iostream>
using namespace std;
int main() {
printf("I\n \nL\no\nv\ne\n \nG\nP\nL\nT\n");
return 0;
}
L1-027 出租 (20 分)
下面是新浪微博上曾经很火的一张图:
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index
数组就是arr
数组的下标,index[0]=2
对应 arr[2]=1
,index[1]=0
对应 arr[0]=8
,index[2]=3
对应 arr[3]=0
,以此类推…… 很容易得到电话号码是18013820100
。
本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。
输入格式:
输入在一行中给出一个由11位数字组成的手机号码。
输出格式:
为输入的号码生成代码的前两行,其中arr
中的数字必须按递减顺序给出。
输入样例:
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};
题目代码:
//L1-027 出租
#include<iostream>
#include<cstring>
#define MAXN 11
using namespace std;
char id[MAXN];
int nnew[MAXN],book[MAXN],dex[MAXN];
int main()
{
int num=0;
cin >>id;
for(int i=0;i<MAXN;i++)
{
book[id[i]-48]++;
}
for(int i=MAXN-1;i>=0;i--)
{
if(book[i]>0)
{
nnew[num]=i;
num++;
}
}
//cout << num << endl;
cout << "int[] arr = new int[]{";
for(int i=0;i<num;i++)
if(i!=num-1)
cout << nnew[i] << ",";
cout << nnew[num-1] << "};\n";
for(int i=0;i<MAXN;i++)
{
for(int j=0;j<num;j++)
{
if(id[i]-48==nnew[j])
{
dex[i]=j;
break;
}
}
}
cout << "int[] index = new int[]{";
for(int i=0;i<MAXN;i++)
if(i!=MAXN-1)
cout << dex[i] << ",";
cout << dex[MAXN-1] << "};\n";
//cout << id <<endl;
return 0;
}
L1-028 判断素数 (10 分)
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数N
(≤ 10),随后N
行,每行给出一个小于231的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes
,否则输出No
。
输入样例:
2
11
111
输出样例:
Yes
No
题目代码:
#include"iostream"
#include"cmath"
using namespace std;
bool isprime(long long int n){
if(n==1){//注意n==1的情况
return false;
}
for(int i=2;i < sqrt(n);i++){//写成i*i< sqrt(n)这种形式好了
if(n%i==0){
return false;
}
}
return true;
}
int main(){
int n;
cin>>n;
long long int temp;
for(int i=0;i < n;i++){
cin>>temp;
if(isprime(temp)){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
}
L1-029 是不是太胖了 (5 分)
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤是公斤的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
输入格式:
输入第一行给出一个正整数H
(100 < H
≤ 300),为某人身高。
输出格式:
在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。
输入样例:
169
输出样例:
124.2
题目代码:
//L1-029 是不是太胖了
#include<iostream>
using namespace std;
int main()
{
float h;
cin >> h;
printf("%.1f\n",(h-100)*0.9*2);
return 0;
}