L1-1 古风排版(20 分)
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
思路:1.输入记得防止被吃空格
2.二维数组逆序来存字符串,一共有N行,那么就一共有strlen(str)/N 列,向上 取整
3.注意,str的最后一个字符存完后要检查二维字符数组的第一列是否有N行,如果没有要用空格补齐

#include<iostream> #include<cstdio> #include<cstring> using namespace std; char Cmap[1005][1005]; int main() { int n,m; char s[1005]; cin >> n; getchar(); //用这个来接收空格 gets(s); int len = strlen(s); m = len/n; if(len%n != 0) m++; int i = 0; for(int k = m-1; k >= 0; k--){ for(int j = 0; j < n; j++){ if(i < len) Cmap[j][k] = s[i++]; else Cmap[j][k] = ' '; //当长度超过len时直接赋值空格。 } } for(int j = 0; j < n; j++){ // 最后输出。 for(int k = 0; k < m; k++) cout << Cmap[j][k]; cout << endl; } return 0; }
L1-2 大笨钟(10 分)
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。
下面就请你写个程序,根据当前时间替大笨钟敲钟。
输入格式:
输入第一行按照hh:mm
的格式给出当前时间。其中hh
是小时,在00到23之间;mm
是分钟,在00到59之间。
输出格式:
根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang
。如果不是敲钟期,则输出:
Only hh:mm. Too early to Dang.
其中hh:mm
是输入的时间。
输入样例1:
19:05
输出样例1:
DangDangDangDangDangDangDangDang
输入样例2:
07:05
输出样例2:
Only 07:05. Too early to Dang.

#include<stdio.h> #include<string.h> int main() { int h,m; scanf("%d:%d",&h,&m); if((h==12&&m>0)||(h>12&&h<24)) { h-=12; int i; if(m>0) h+=1; for(i=0; i<h; i++) printf("Dang"); printf("\n"); } else if(h==24) h=0; else printf("Only %02d:%02d. Too early to Dang.\n",h,m); return 0; }
L1-3 宇宙无敌加法器(20 分)
地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是 [2,9] 区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT 星人通常只需要记住前 20 位就够用了,以后各位默认为 10 进制。
在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203 + 415”呢?我们得首先计算最低位:3 + 5 = 8;因为最低位是 7 进制的,所以我们得到 1 和 1 个进位。第 2 位是:0 + 1 + 1(进位)= 2;因为此位是 2 进制的,所以我们得到 0 和 1 个进位。第 3 位是:2 + 4 + 1(进位)= 7;因为此位是 5 进制的,所以我们得到 2 和 1 个进位。第 4 位是:6 + 1(进位)= 7;因为此位是 10 进制的,所以我们就得到 7。最后我们得到:6203 + 415 = 7201。
输入格式:
输入首先在第一行给出一个 N 位的进制表(0 < N ≤ 20),以回车结束。 随后两行,每行给出一个不超过 N 位的非负的 PAT 数。
输出格式:
在一行中输出两个 PAT 数之和。
输入样例:
30527
06203
415
输出样例:
7201
思路:1. 先将两个数的位数给补的一样,方便与计算,直接用string 这样前面的000还可以和后面的xxx直接连接起来
2.从最后一个开始相加,用string直接连起来比较方便,不用*pow(10,x)
3.进制的转换,k进制的话直接用两者之和%k就得到他的十进制数了,注意进位的情况
4.输出要注意首部为0的情况,用一个tag进行标记,首字母不为0才输出
5.坑点 0 0 的情况

#include<iostream> using namespace std; int main(){ string radix,num1,num2; cin>>radix>>num1>>num2; if(num1.length()>num2.length()){ string temp=""; for(int i=0;i<num1.length()-num2.length();i++){ temp+="0"; } num2=temp+num2; } if(num1.length()<num2.length()){ string temp=""; for(int i=0;i<num2.length()-num1.length();i++){ temp+="0"; } num1=temp+num1; } int temp=radix.length()-1; int carry=0; //进位 string result=""; //对各个位进行计算 for(int i= num1.length()-1;i>=0;i--){ int sum=(num1[i]-'0')+(num2[i]-'0')+carry; int r=radix[temp]-'0'; temp--; if(r==0){ r=10; } carry=sum/r; result=(char)(sum%r+'0')+result; } //有进位并且还有进制 while(carry != 0&&temp>=0) { int sum=carry; int r=radix[temp]-'0'; temp--; if(r==0){ r=10; } carry=sum/r; result=(char)(sum%r+'0') + result; } if(carry!=0){ result=(char)(carry+'0')+result; } int tag=0; for(int i=0;i<result.length();i++){ if(tag==1){ cout<<result[i]; continue; } if(result[i]!='0'){ if(tag==0) tag=1; cout<<result[i]; } } if(tag==0) cout<<0; return 0; } /*
L1-4 情人节(15 分)
以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。
输入格式:
输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点.
标志输入的结束,这个符号不算在点赞名单里。
输出格式:
根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”;若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo... No one is for you ...”。
输入样例1:
GaoXZh
Magi
Einst
Quark
LaoLao
FatMouse
ZhaShen
fantacy
latesum
SenSen
QuanQuan
whatever
whenever
Potaty
hahaha
.
输出样例1:
Magi and Potaty are inviting you to dinner...
输入样例2:
LaoLao
FatMouse
whoever
.
输出样例2:
FatMouse is the only one for you...
输入样例3:
LaoLao
.
输出样例3:
Momo... No one is for you ...
思路:1.输入有技巧
2.统计一下输入的名字数目即可

#include<stdio.h> #include<string.h> char a[10000][20]; int main() { int cnt=0; while(scanf("%s",a[cnt])==1&&a[cnt][0]!='.') { cnt++; } if(cnt<2) printf("Momo... No one is for you ...\n"); else if(cnt<14) printf("%s is the only one for you...\n",a[1]); else printf("%s and %s are inviting you to dinner...\n",a[1],a[13]); }
这道超级简单的题目没有任何输入。
你只需要把这句很重要的话 —— I Love GPLT
——竖着输出就可以了。
所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char a[50]="I Love GPLT"; int main() { int len=strlen(a); for(int i=0;i<len;i++){ printf("%c\n",a[i]); } return 0; }
L1-6 是不是太胖了(5 分)
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤是公斤的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
输入格式:
输入第一行给出一个正整数H
(100 < H ≤ 300),为某人身高。
输出格式:
在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。
输入样例:
169
输出样例:
124.2

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int H; while(scanf("%d",&H) !=EOF){ printf("%.1lf\n",2*((H-100)*0.9)); } return 0; }
L1-7 到底是不是太胖了(10 分)
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
输入格式:
输入第一行给出一个正整数N
(≤ 20)。随后N
行,每行给出两个整数,分别是一个人的身高H
(120 < H < 200;单位:厘米)和真实体重W
(50 < W ≤ 300;单位:市斤),其间以空格分隔。
输出格式:
为每个人输出一行结论:如果是完美身材,输出You are wan mei!
;如果太胖了,输出You are tai pang le!
;否则输出You are tai shou le!
。
坑点:不要直接用浮点数,会有浮点误差

#include <bits/stdc++.h> using namespace std; int main(){ int n; scanf("%d", &n); for(int i = 0; i < n; i++){ int h, w; scanf("%d%d", &h, &w); w *= 50; int sw = (h - 100) * 9; if(w >= sw * 11) printf("You are tai pang le!\n"); else if(w <= sw * 9) printf("You are tai shou le!\n"); else printf("You are wan mei!\n"); } return 0; }
L1-8 外星人的一天(15 分)
地球上的一天是 24 小时。但地球上还有一些精力和勤奋度都远超一般人的大神级人物,他们的“一天”是以 48 小时为周期运转的,这种人被人们尊称为“外星人”。比如普通人的周一早 8:30 是外星人的周一早 4:15;普通人的周二早 9:21 是外星人的周一下午 4:40 —— 对外星人而言,一周的工作时间只有三天(即普通人的周一至周六),周日他们会蒙头大睡恢复体力,时间对他们是没有意义的。
在外星人眼里,地球人的时钟对他们而言实在是太不方便了。本题就请你为外星人们实现一款专用时钟。
输入格式:
输入在一行中给出一个不超过 10 的正整数 N,随后 N 行,每行给出一个地球人的时刻,格式为:Day hh:mm
,其中Day
是 [0,6] 区间内的整数,顺序代表周日至周六;hh
是 24 小时制的小时数,是 [0,23] 区间内的整数;mm
是分钟数,是 [0,59] 区间内的整数。
输出格式:
对输入的每一行地球人时刻,输出对应的外星人时间,格式与输入相同。其中Day
在 [0,3] 区间内,对应周日到周三;分钟数若不是整数,则向下取整。注意:由于周日的时间对外星人没有意义,所以直接输出地球人的时间即可。
输入样例:
3
1 08:30
2 09:21
0 21:07
输出样例:
1 04:15
1 16:40
0 21:07

#include<bits/stdc++.h> using namespace std; int main() { int n; int a, b, c; cin >> n; for (int i = 0; i < n; i++) { scanf("%d%d:%d", &a, &b, &c); if (a == 0) printf("%d %02d:%02d\n", a, b, c); else { if (a%2==1) { c = ((b % 2) * 60 + c) / 2; b = b / 2; } else { b = b + 24; c = ((b % 2) * 60 + c) / 2; b = b / 2; } printf("%d %02d:%02d\n", (a + 1) / 2, b, c); } } }