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); } } }