PAT 習題集c++
本題要求編寫程序,計算2個正整數的和、差、積、商並輸出。題目保證輸入和輸出所有在整型範圍內。git
輸入格式:oop
輸入在一行中給出2個正整數A和B。測試
輸出格式:ui
在4行中按照格式「A 運算符 B = 結果」順序輸出和、差、積、商。spa
輸入樣例:3 2輸出樣例:
3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 = 1#include <stdio.h> int main() { int A; int B; int X, Y, Z, W; scanf("%d %d", &A, &B); X = A + B; Y = A - B; Z = A * B; W = A / B; printf("%d + %d = %d\n" ,A, B, X); printf("%d - %d = %d\n", A, B, Y); printf("%d * %d = %d\n", A, B, Z); printf("%d / %d = %d\n", A, B, W); return 0; }
若是已知英制長度的英尺foot和英寸inch的值,那麼對應的米是(foot+inch/12)*0.3048。如今,若是用戶輸入的是釐米數,那麼對應英制長度的英尺和英寸是多少呢?別忘了1英尺等於12英寸。.net
輸入格式:設計
輸入在一行中給出1個正整數,單位是釐米。code
輸出格式:blog
在一行中輸出這個釐米數對應英制長度的英尺和英寸的整數值,中間用空格分開。
輸入樣例:170輸出樣例:
5 6#include <stdio.h> int main() { int cm; scanf("%d", &cm); int foot = cm / 30.48; int inch = (cm/30.48 - foot) * 12; printf("%d %d", foot, inch); return 0; }
有時候人們用四位數字表示一個時間,好比1106表示11點零6分。如今,你的程序要根據起始時間和流逝的時間計算出終止時間。讀入兩個數字,第一個數字以這樣的四位數字表示當前時間,第二個數字表示分鐘數,計算當前時間通過那麼多分鐘後是幾點,結果也表示爲四位數字。當小時爲個位數時,沒有前導的零,即5點30分表示爲530。注意,第二個數字表示的分鐘數可能超過60,也多是負數。
輸入格式:
輸入在一行中給出2個整數,分別是四位數字表示的起始時間、以及流逝的分鐘數,其間以空格分隔。注意:在起始時間中,當小時爲個位數時,沒有前導的零,即5點30分表示爲530;流逝的分鐘數可能超過60,也多是負數。
輸出格式:
輸出四位數字表示的終止時間。題目保證起始時間和終止時間在同一天內。
輸入樣例:1120 110輸出樣例:
1310#include <stdio.h> int main() { int i, j, x = 0, y, z; scanf("%d%d", &i, &j); if(i >= 1000) { x = i / 1000; y = (i % 1000) / 100; z = (i %1000) %100; } else { y = i / 100; z = i % 100; } int s = (10*x + y) * 60 + z; int n = s + j; i = n / 60 *100 + (n - ((n / 60 )* 60)); printf("%d", i); return 0; }
程序每次讀入一個正3位數,而後輸出按位逆序的數字。注意:當輸入的數字含有結尾的0時,輸出不該帶有前導的0。好比輸入700,輸出應該是7。
輸入格式:
每一個測試是一個3位的正整數。
輸出格式:
輸出按位逆序的數。
輸入樣例:123輸出樣例:
321#include <stdio.h> int main() { int i; scanf("%d", &i); int a = i % 100 %10; int b = i / 100; int c = i %100 / 10; i = a*100 + b + c*10; printf("%d", i); return 0; }
BCD數是用一個字節來表達兩位十進制的數,每四個比特表示一位。因此若是一個BCD數的十六進制是0x12,它表達的就是十進制的12。可是小明沒學過BCD,把全部的BCD數都看成二進制數轉換成十進制輸出了。因而BCD的0x12被輸出成了十進制的18了!
如今,你的程序要讀入這個錯誤的十進制數,而後輸出正確的十進制數。提示:你能夠把18轉換回0x12,而後再轉換回12。
輸入格式:
輸入在一行中給出一個[0, 153]範圍內的正整數,保證能轉換回有效的BCD數,也就是說這個整數轉換成十六進制時不會出現A-F的數字。
輸出格式:
輸出對應的十進制數。
輸入樣例:18輸出樣例:
12#include <stdio.h> int main() { int i; scanf("%d", &i); int t = i % 16 + i / 16 * 10; printf("%d", t); return 0; }
模擬交通警察的雷達測速儀。輸入汽車速度,若是速度超出60 mph,則顯示「Speeding」,不然顯示「OK」。
輸入格式:
輸入在一行中給出1個不超過500的非負整數,即雷達測到的車速。
輸出格式:
在一行中輸出測速儀顯示結果,格式爲:「Speed: V - S」,其中V是車速,S或者是Speeding、或者是OK。
輸入樣例1:40輸出樣例1:
Speed: 40 - OK輸入樣例2:
75輸出樣例2:
Speed: 75 - Speeding#include <stdio.h> int main() { int i; scanf("%d", &i); if(i <= 60) printf("Speed: %d - OK", i); else printf("Speed: %d - Speeding", i); return 0; }
中國有句俗語叫「三天打魚兩天曬網」。假設某人從某天起,開始「三天打魚兩天曬網」,問這我的在之後的第N天中是「打魚」仍是「曬網」?
輸入格式:
輸入在一行中給出1個不超過1000的正整數N。
輸出格式:
在一行中輸出此人在第N天中是「Fishing」(即「打魚」)仍是「Drying」(即「曬網」),而且輸出「in day N」。
輸入樣例1:103輸出樣例1:
Fishing in day 103輸入樣例2:
34輸出樣例2:
Drying in day 34#include <stdio.h> int main() { int i; scanf("%d", &i); if(i%5 <= 3 && i%5 != 0) printf("Fishing in day %d", i); else printf("Drying in day %d", i); return 0; }
三個球A、B、C,大小形狀相同且其中有一個球與其餘球重量不一樣。要求找出這個不同的球。
輸入格式:
輸入在一行中給出3個正整數,順序對應球A、B、C的重量。
輸出格式:
在一行中輸出惟一的那個不同的球。
輸入樣例:1 1 2輸出樣例:
C# include <stdio.h> int main() { int A, B, C; scanf("%d%d%d",&A, &B, &C); if(A != B && B ==C) printf("A"); else if(B != A && A == C) printf("B"); else if(C != A && A == B) printf("C"); return 0; }
編寫一個程序,要求用戶輸入24小時制的時間,而後顯示12小時制的時間。
輸入格式:
輸入在一行中給出帶有中間的「:」符號(半角的冒號)的24小時制的時間,如12:34
表示12點34分。當小時或分鐘數小於10時,均沒有前導的零,如5:6
表示5點零6分。
提示:在scanf的格式字符串中加入「:」,讓scanf來處理這個冒號。
輸出格式:
在一行中輸出這個時間對應的12小時制的時間,數字部分格式與輸入的相同,而後跟上空格,再跟上表示上午的字符串「AM」或表示下午的字符串「PM」。如「5:6 PM
」表示下午5點零6分。注意,在英文的習慣中,中午12點被認爲是下午,因此24小時制的12:00
就是12小時制的12:0 PM
;而0點被認爲是次日的時間,因此是0:0 AM
。
21:11輸出樣例:
9:11 PM#include <stdio.h> int main() { int i, j; scanf("%d:%d", &i, &j); if(i >= 0 && i < 12) printf("%d:%d AM", i, j); else if(i == 12) printf("%d:%d PM", i, j); else if(i == 24) printf("%d:%d AM", i-24, j); else printf("%d:%d PM", i-12, j); return 0; }
本題要求編寫程序將一個百分制成績轉換爲五分製成績。轉換規則:
輸入格式:
輸入在一行中給出1個整數的百分制成績。
輸出格式:
在一行中輸出對應的五分製成績。
輸入樣例:90輸出樣例:
A
#include <stdio.h> int main() { int i; scanf("%d", &i); if(i >= 90) printf("A"); else if(i < 90 && i >= 80) printf("B"); else if(i < 80 && i >= 70) printf("C"); else if(i < 70 && i >= 60) printf("D"); else if(i < 60) printf("E"); return 0; }
給定不超過6的正整數A,考慮從A開始的連續4個數字。請輸出全部由它們組成的無重複數字的3位數。
輸入格式:
輸入在一行中給出A。
輸出格式:
輸出知足條件的的3位數,要求從小到大,每行6個整數。整數間以空格分隔,但行末不能有多餘空格。
輸入樣例:2輸出樣例:
234 235 243 245 253 254 324 325 342 345 352 354 423 425 432 435 452 453 523 524 532 534 542 543#include <stdio.h> int main() { int A, i, j, k, p = 0; scanf("%d", &A); for(i=A; i<A+4; ++i) for(j=A; j<A+4; ++j) for(k=A; k<A+4; ++k) { if(i != j && i != k && j != k) { printf("%d", i*100+10*j+k); p++; if(p%6 == 0) printf("\n"); else printf(" "); } } return 0; }
水仙花數是指一個N位正整數(N>=3),它的每一個位上的數字的N次冪之和等於它自己。例如:153 = 13 + 53+ 33。本題要求編寫程序,計算全部N位水仙花數。
輸入格式:
輸入在一行中給出一個正整數N(3<=N<=7)。
輸出格式:
按遞增順序輸出全部N位水仙花數,每一個數字佔一行。
輸入樣例:3輸出樣例:
153 370 371 407#include <stdio.h> int main() { int n = 0, m = 0, l = 0, k = 0, roll = 0; int min = 1, t = 0, sum = 0, sum1 = 0; scanf("%d", &n); m=n; while(m > 1) //built the minimum for n digit { min*=10; m--; } t=min; while(t < 10*min) //all the number for n digit { roll = t; m = n; sum = 1; while(m > 0) { sum = sum*(roll%10); m--; } l = n; while(l > 0) { roll = roll / 10; k = roll % 10; m = n; sum1 = 1; while(m > 0) { sum1 = sum1 * k; m--; } sum = sum + sum1; l--; } if(t == sum) { printf("%d\n", t); } t++; } return 0; }
下面是一個完整的下三角九九口訣表:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
本題要求對任意給定的1位正整數N,輸出從1*1到N*N的部分口訣表。
輸入格式:
輸入在一行中給出一個正整數N(1<=N<=9)。
輸出格式:
輸出下三角N*N部分口訣表,其中等號右邊數字佔4位、左對齊。
輸入樣例:4輸出樣例:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16#include <stdio.h> int main(void) { int n; scanf("%d", &n); int i, j; for (i=1; i<=n; i++) { for (j=1; j<=i; j++) printf("%d*%d=%-4d", j, i, i*j); puts(""); } return 0; }
本題要求統計給定整數M和N區間內素數的個數並對它們求和。
輸入格式:
輸入在一行中給出2個正整數M和N(1<=M<=N<=500)。
輸出格式:
在一行中順序輸出M和N區間內素數的個數以及它們的和,數字間以空格分隔。
輸入樣例:10 31輸出樣例:
7 143#include <stdio.h> #include <stdbool.h> int nums(int x) { int i; if(x ==1 ){ return 0; } for(i=2; i*i<=x; i++){ if(x%i == 0){ return 0; } } return 1; } int main() { int m,n; int j; scanf("%d %d", &m, &n); int count = 0; int sum = 0; for(j=m; j<=n; j++) { if(nums(j) == 1) { count++; sum += j; } } printf("%d %d", count, sum); return 0; }
猜數字遊戲是令系統隨機產生一個100之內的正整數,用戶輸入一個數對其進行猜想,須要你編寫程序自動對其與隨機產生的被猜數進行比較,並提示大了(「Too big」),仍是小了(「Too small」),相等表示猜到了。若是猜到,則結束程序。程序還要求統計猜的次數,若是1次猜出該數,提示「Bingo!」;若是3次之內猜到該數,則提示「Lucky You!」;若是超過3次可是在N(>3)次之內(包括第N次)猜到該數,則提示「Good Guess!」;若是超過N次都沒有猜到,則提示「Game Over」,並結束程序。若是在到達N次以前,用戶輸入了一個負數,也輸出「Game Over」,並結束程序。
輸入格式:
輸入第一行中給出2個不超過100的正整數,分別是系統產生的隨機數、以及猜想的最大次數N。隨後每行給出一個用戶的輸入,直到出現負數爲止。
輸出格式:
在一行中輸出每次猜想相應的結果,直到輸出猜對的結果或「Game Over」則結束。
輸入樣例:58 4 70 50 56 58 60 -2輸出樣例:
Too big Too small Too small Good Guess!#include <stdio.h> int main() { int n, times; int i, t = 0; scanf("%d %d", &n, ×); while(1) { scanf("%d", &i); ++t; if(i == n && t == 1) { printf("Bingo!\n"); break; } else if(i < 0 || t > times ) { printf("Game Over"); break; } else if(i == n && t > 1 && t <= 3 && t <= times) { printf("Lucky You!\n"); break; } else if(i > n) { printf("Too big\n"); } else if(i < n && i > 0) { printf("Too small\n"); } else if(i == n && t > 3 && t <= times) { printf("Good Guess!\n"); break; } } return 0; }
本題要求編寫程序,計算序列 2/1+3/2+5/3+8/5+... 的前N項之和。注意該序列從第2項起,每一項的分子是前一項分子與分母的和,分母是前一項的分子。
輸入格式:
輸入在一行中給出一個正整數N。
輸出格式:
在一行中輸出部分和的值,精確到小數點後2位。題目保證計算結果不超過雙精度範圍。
輸入樣例:20輸出樣例:
32.66#include <stdio.h> int main() { int n = 1, i; double a = 2, b = 1, t, s = 0; scanf("%d", &n); for(i=1; i<=n; ++i) { t = a; s += a/b; a += b; b = t; } printf("%.2lf", s); return 0; }
分數能夠表示爲「分子/分母」的形式。編寫一個程序,要求用戶輸入一個分數,而後將其約分爲最簡分式。最簡分式是指分子和分母不具備能夠約分的成分了。如6/12能夠被約分爲1/2。當分子大於分母時,不須要表達爲整數又分數的形式,即11/8仍是11/8;而當分子分母相等時,仍然表達爲1/1的分數形式。
輸入格式:
輸入在一行中給出一個分數,分子和分母中間以斜槓「/」分隔,如:12/34
表示34分之12。分子和分母都是正整數(不包含0,若是不清楚正整數的定義的話)。
提示:在scanf的格式字符串中加入「/」,讓scanf來處理這個斜槓。
輸出格式:
在一行中輸出這個分數對應的最簡分式,格式與輸入的相同,即採用「分子/分母」的形式表示分數。如5/6
表示6分之5。
60/120輸出樣例:
1/2#include <stdio.h> int main() { int i, j, n, k; scanf("%d/%d", &i, &j); loop: if(i >= j) n = j; else n = i; for(k=2; k<=n; ++k) { if(j % k == 0 && i % k == 0) { j /= k; i /= k; goto loop; } } printf("%d/%d", i, j); return 0; }
輸入一個整數,輸出每一個數字對應的拼音。當整數爲負數時,先輸出「fu」字。十個數字對應的拼音以下:
0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu
輸入格式:
輸入在一行中給出一個整數,如:1234
。
提示:整數包括負數、零和正數。
輸出格式:
在一行中輸出這個整數對應的拼音,每一個數字的拼音之間用空格分開,行末沒有最後的空格。如yi er san si
。
-600輸出樣例:
fu liu ling ling#include <stdio.h> #include <string.h> char str[20]; const char *num[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; int main() { int i, k; scanf("%s", str); k = strlen(str); if ( str[0] == '-') printf("fu"); else printf("%s", num[str[0]-'0']); for ( i=1; i<k; i++ ) { printf(" %s", num[str[i]-'0']); } printf("\n"); return 0; }
輸入兩個整數a和n,a的範圍是[0,9],n的範圍是[1,8],求數列之和S = a+aa+aaa+...+aaa...a(n個a)。如a爲二、n爲8時輸出的是2+22+222+...+22222222的和。
輸入格式:
輸入在一行中給出兩個整數,前後表示a和n。
輸出格式:
在一行中輸出要求的數列之和。
輸入樣例:2 4輸出樣例:
2468#include <stdio.h> #include <math.h> int main() { int a, n, i, s = 0; scanf("%d%d", &a, &n); for(i=1; i<=n; ++i) { s += (pow(10.0,i)-1) * a / 9; } printf("%d", s); return 0; }
本題要求編寫程序,順序讀入浮點數一、整數、字符、浮點數2,再按照字符、整數、浮點數一、浮點數2的順序輸出。
輸入格式:
輸入在一行中順序給出浮點數一、整數、字符、浮點數2,其間以1個空格分隔。
輸出格式:
在一行中按照字符、整數、浮點數一、浮點數2的順序輸出,其中浮點數保留小數點後2位。
輸入樣例:2.12 88 c 4.7輸出樣例:
c 88 2.12 4.70#include <stdio.h> int main() { float f1, f2; char ch; int i; scanf("%f %d %c %f", &f1, &i, &ch, &f2); printf("%c %d %.2f %.2f", ch, i, f1, f2); return 0; }
模擬簡單運算器的工做。假設計算器只能進行加減乘除運算,運算數和結果都是整數,4種運算符的優先級相同,按從左到右的順序計算。
輸入格式:
輸入在一行中給出一個四則運算算式,沒有空格,且至少有一個操做數。遇等號」=」說明輸入結束。
輸出格式:
在一行中輸出算式的運算結果,或者若是除法分母爲0或有非法運算符,則輸出錯誤信息「ERROR」。
輸入樣例:1+2*10-10/2=輸出樣例:
10#include <stdio.h> int main() { char ch = '0'; int result, i, flag = 0; scanf("%d", &result); while( ch != '=' ) { scanf("%c", &ch); if(ch == '=') break; scanf("%d", &i); if( ch == '+' ) result += i; else if( ch == '-' ) result -= i; else if( ch == '*' ) result *= i; else if( ch == '/' ) { if( i != 0 ) result /= i; else flag = 1; } else flag = 1; } if(flag) printf("ERROR\n"); else printf("%d", result); return 0; }
輸入一個以#結束的字符串,本題要求將小寫字母所有轉換成大寫字母,把大寫字母所有轉換成小寫字母,其它字符不變。
輸入格式:
輸入在一行中給出一個長度不超過40的、以#結束的非空字符串。
輸出格式:
在一行中按照要求輸出轉換後的字符串。
輸入樣例:Hello World! 123#輸出樣例:
hELLO wORLD! 123#include <stdio.h> int main() { char c; c = getchar(); while(c != '#') { if(c >= 'a' && c <= 'z') { c -= 32; } else if(c >= 'A' && c <= 'Z') { c += 32; } printf("%c", c); c = getchar(); } return 0; }
你的程序要讀入一行文本,其中以空格分隔爲若干個單詞,以‘.’結束。你要輸出每一個單詞的長度。這裏的單詞與語言無關,能夠包括各類符號,好比「it's」算一個單詞,長度爲4。注意,行中可能出現連續的空格;最後的‘.’不計算在內。
輸入格式:
輸入在一行中給出一行文本,以‘.’結束。
提示:用scanf("%c",...);
來讀入一個字符,直到讀到‘.’爲止。
輸出格式:
在一行中輸出這行文本對應的單詞的長度,每一個長度之間以空格隔開,行末沒有最後的空格。
輸入樣例:
It's great to see you here.
輸出樣例:
4 5 2 3 3 4#include <stdio.h> int main() { char s[100]; int i = 0; do { scanf("%c", &s[i]); i++; } while(s[i-1] != '.'); int j; int cnt = 0; int k = 0; for(j=0; j<i; j++) { if(s[j] != ' ') { cnt++; if(k != 0 && s[j] != '.') { printf(" "); k = 0; } if(s[j] == '.' && s[j - 1] != ' ' && cnt != 1) { printf("%d", cnt-1); } } else if(cnt != 0) { printf("%d", cnt); cnt = 0; k = 1; } } return 0; }
讀入一個天然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
輸入格式:每一個測試輸入包含1個測試用例,即給出天然數n的值。這裏保證n小於10100。
輸出格式:在一行內輸出n的各位數字之和的每一位,拼音數字間有1空格,但一行中最後一個拼音數字後沒有空格。
輸入樣例:1234567890987654321123456789輸出樣例:
yi san wu#include <stdio.h> #include <string.h> const char *num[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; int main() { char ch, number[10]; int s = 0, i; while( (ch = getchar()) != '\n' ) { s += ch-'0'; } sprintf(number, "%d", s); printf("%s", num[number[0]-'0']); for ( i=1; i<strlen(number); i++ ) { printf(" %s", num[number[i]-'0']); } printf("\n"); return 0; }
讓咱們用字母B來表示「百」、字母S表示「十」,用「12...n」來表示個位數字n(<10),換個格式來輸出任一個不超過3位的正整數。例如234應該被輸出爲BBSSS1234,由於它有2個「百」、3個「十」、以及個位的4。
輸入格式:每一個測試輸入包含1個測試用例,給出正整數n(<1000)。
輸出格式:每一個測試用例的輸出佔一行,用規定的格式輸出n。
輸入樣例1:234輸出樣例1:
BBSSS1234輸入樣例2:
23輸出樣例2:
SS123#include <stdio.h> int main() { int i, j, B, S; scanf("%d", &i); if(i >= 1 && i < 1000) { if(i >= 1 && i < 10) { for(j=1; j<=i; ++j) { printf("%d", j); } } if(i >= 10 && i < 100) { S = i / 10; for(j=1; j<=S; ++j) { printf("S"); } i = i % 10; for(j=1; j<=i; ++j) { printf("%d", j); } } if(i >= 100 && i < 1000) { B = i / 100; for(j=1; j<=B; ++j) { printf("B"); } S = i /10 % 10; for(j=1; j<=S; ++j) { printf("S"); } i = i % 10; for(j=1; j<=i; ++j) { printf("%d", j); } } } return 0; }
給定區間[-231, 231]內的3個整數A、B和C,請判斷A+B是否大於C。
輸入格式:
輸入第1行給出正整數T(<=10),是測試用例的個數。隨後給出T組測試用例,每組佔一行,順序給出A、B和C。整數間以空格分隔。
輸出格式:
對每組測試用例,在一行中輸出「Case #X: true」若是A+B>C,不然輸出「Case #X: false」,其中X是測試用例的編號(從1開始)。
輸入樣例:4 1 2 3 2 3 4 2147483647 0 2147483646 0 -2147483648 -2147483647輸出樣例:
Case #1: false Case #2: true Case #3: true Case #4: false#include <stdio.h> int main() { int t, i; long a, j, k; scanf("%d", &t); if(t >= 1 && t <= 10) { for(i=1; i<=t; ++i) { scanf("%ld%ld%ld", &a, &j, &k); if(a + j > k) { printf("Case #%d: true\n", i); } else { printf("Case #%d: false\n", i); } } } return 0; }
令Pi表示第i個素數。現任給兩個正整數M <= N <= 104,請輸出PM到PN的全部素數。
輸入格式:
輸入在一行中給出M和N,其間以空格分隔。
輸出格式:
輸出從PM到PN的全部素數,每10個數字佔1行,其間以空格分隔,但行末不得有多餘空格。
輸入樣例:5 27輸出樣例:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103#include <stdio.h> int a[10001]; int main() { int i, c = 0, j, p, m, n; a[0] = 2; for ( i=3; ;i+=2 ) { p = 1; for ( j=2; j*j<=i; j++ ) { if ( i % j == 0 ) { p = 0; break; } } if ( p ) { a[++c] = i; } if ( c == 10000 ) break; } c = 0; scanf("%d %d", &m, &n); for ( i=m; i<=n; i++ ) { c++; printf("%d", a[i-1]); if ( c % 10 == 0 ) printf("\n"); else if ( i < n ) printf(" "); } if ( c % 5 != 0 ) printf("\n"); return 0; }
本題要求從輸入的N個整數中查找給定的X。若是找到,輸出X的位置(從0開始數);若是沒有找到,輸出「Not Found」。
輸入格式:
輸入在第1行中給出2個正整數N(<=20)和X,第2行給出N個整數。數字均不超過長整型,其間以空格分隔。
輸出格式:
在一行中輸出X的位置,或者「Not Found」。
輸入樣例1:5 7 3 5 7 1 9輸出樣例1:
2輸入樣例2:
5 7 3 5 8 1 9輸出樣例2:
Not Found#include <stdio.h> #define N 1000 int a[N]; int main() { int n, key, i; scanf("%d%d", &n, &key); for ( i=0; i<n; i++ ) { scanf("%d", &a[i]); } for ( i=0; i<n; i++ ) { if ( a[i] == key ) { printf("%d\n", i); break; } } if ( i == n ) { printf("Not Found\n"); } return 0; }
給定一批整數,分析每一個整數的每一位數字,求出現次數最多的個位數字。例如給定3個整數123四、234五、3456,其中出現最屢次數的數字是3和4,均出現了3次。
輸入格式:
輸入在第1行中給出正整數N(<=1000),在第2行中給出N個不超過整型範圍的正整數,數字間以空格分隔。
輸出格式:
在一行中按格式「M: n1 n2 ...」輸出,其中M是最大次數,n一、n二、……爲出現次數最多的個位數字,按從小到大的順序排列。數字間以空格分隔,但末尾不得有多餘空格。
輸入樣例:3 1234 2345 3456輸出樣例:
3: 3 4#include <stdio.h> #include <string.h> int a[1002]; int main() { int t, i, max = 0; int count[10]; scanf("%d", &t); for ( i=0; i<10; i++ ) { count[i] = 0; } for ( i=0; i<t; i++ ) { scanf("%d", &a[i]); } for ( i=0; i<t; i++ ) { while (a[i]) { count[a[i]%10]++; a[i] /= 10; } } for ( i=0; i<10; i++ ) { if ( max < count[i] ) { max = count[i]; } } printf("%d:", max); for ( i=0; i<10; i++ ) { if ( count[i] == max ) { printf(" %d", i); } } printf("\n"); return 0; }
給定M行N列的整數矩陣A,若是A的非邊界元素A[i][j]大於相鄰的上下左右4個元素,那麼就稱元素A[i][j]是矩陣的局部極大值。本題要求給定矩陣的所有局部極大值及其所在的位置。
輸入格式:
輸入在第1行中給出矩陣A的行數M和列數N(3<=M,N<=20);最後M行,每行給出A在該行的N個元素的值。數字間以空格分隔。
輸出格式:
每行按照「元素值 行號 列號」的格式輸出一個局部極大值,其中行、列編號從1開始。要求按照行號遞增輸出;若同行有超過1個局部極大值,則該行按列號遞增輸出。若沒有局部極大值,則輸出「None 總行數 總列數」。
輸入樣例1:4 5 1 1 1 1 1 1 3 9 3 1 1 5 3 5 1 1 1 1 1 1輸出樣例1:
9 2 3 5 3 2 5 3 4輸入樣例2:
3 5 1 1 1 1 1 9 3 9 9 1 1 5 3 5 1輸出樣例2:
None 3 5#include <stdio.h> int a[21][21]; int main() { int m, n, i, j, p = 0; scanf("%d %d", &m, &n); for ( i=0; i<m; i++ ) { for ( j=0; j<n; j++ ) { scanf("%d", &a[i][j]); } } for ( i=1; i<m-1; i++ ) { for ( j=1; j<n-1; j++ ) { if ( a[i][j] > a[i][j+1] && a[i][j] > a[i][j-1] && a[i][j] > a[i+1][j] && a[i][j] > a[i-1][j] ) { printf("%d %d %d\n", a[i][j], i+1, j+1); p = 1; } } } if ( !p ) { printf("None %d %d\n", m, n); } return 0; }
給定數字0-9各若干個。你能夠以任意順序排列這些數字,但必須所有使用。目標是使得最後獲得的數儘量小(注意0不能作首位)。例如:給定兩個0,兩個1,三個5,一個8,咱們獲得的最小的數就是10015558。
現給定數字,請編寫程序輸出可以組成的最小的數。
輸入格式:
每一個輸入包含1個測試用例。每一個測試用例在一行中給出10個非負整數,順序表示咱們擁有數字0、數字一、……數字9的個數。整數間用一個空格分隔。10個數字的總個數不超過50,且至少擁有1個非0的數字。
輸出格式:
在一行中輸出可以組成的最小的數。
輸入樣例:2 2 0 0 0 3 0 0 1 0輸出樣例:
10015558#include <stdio.h> int b[10]; int main() { int i, j; for ( i=0; i<10; i++ ) { b[i] = 0; } for ( i=0; i<10; i++ ) { scanf("%d", &b[i]); } for ( i=1; i<10; i++ ) { if (b[i]) { printf("%d", i); b[i]--; break; } } for ( i=0; i<10; i++ ) { for ( j=0; j<b[i]; j++ ) { printf("%d", i); } } printf("\n"); return 0; }
給定一句英語,要求你編寫程序,將句中全部單詞的順序顛倒輸出。
輸入格式:測試輸入包含一個測試用例,在一行內給出總長度不超過80的字符串。字符串由若干單詞和若干空格組成,其中單詞是由英文字母(大小寫有區分)組成的字符串,單詞之間用1個空格分開,輸入保證句子末尾沒有多餘的空格。
輸出格式:每一個測試用例的輸出佔一行,輸出倒序後的句子。
輸入樣例:Hello World Here I Come輸出樣例:
Come I Here World Hello#include <stdio.h> #include <string.h> char str[81]; int main() { int i, k; char *p; gets(str); k = strlen(str); p = str + k; while (1) { if ( p == str ) { printf("%s\n", p); break; } if (*p == ' ' && *(p+1) != ' ') { *p = '\0'; printf("%s ", p+1); } p--; } return 0; }
輸入一個字符串S,再輸入一個字符c,要求在字符串S中查找字符c。若是找不到則輸出「Not found」;若找到則輸出字符串S中從c開始的全部字符。
輸入格式:
輸入在第1行中給出一個不超過80個字符長度的、以回車結束的非空字符串;在第2行中給出一個字符。
輸出格式:
在一行中按照題目要求輸出結果。
輸入樣例1:It is a black box b輸出樣例1:
black box輸入樣例2:
It is a black box B輸出樣例2:
Not found#include <string.h> #include <stdio.h> char str[180]; int main() { char ch; int i, k, p = 0; gets(str); k = strlen(str); scanf("%c", &ch); for ( i=0; i<k; i++ ) { if ( str[i] == ch ) { p = 1; } if ( p ) { printf("%c", str[i]); } } if ( !p ) { printf("Not found\n"); } else { printf("\n"); } return 0; }
輸入2個字符串S1和S2,要求刪除字符串S1中出現的全部子串S2,即結果字符串中不能包含S2。
輸入格式:
輸入在2行中分別給出不超過80個字符長度的、以回車結束的2個非空字符串,對應S1和S2。
輸出格式:
在一行中輸出刪除字符串S1中出現的全部子串S2後的結果字符串。
輸入樣例:Tomcat is a male ccatat cat輸出樣例:
Tom is a male#include <stdio.h> #include <string.h> char s1[81], s2[81]; int main() { int i, k; gets(s1); gets(s2); char *p = strstr(s1, s2); while(1) { char *p = strstr(s1, s2); if ( p ) { for ( i=0; i<strlen(p) - strlen(s2); i++ ) { p[i] = p[strlen(s2) + i]; } p[i] = '\0'; } else { puts(s1); break; } } return 0; }
輸入一個字符串,對該字符串進行逆序,輸出逆序後的字符串。
輸入格式:
輸入在一行中給出一個不超過80個字符長度的、以回車結束的非空字符串。
輸出格式:
在一行中輸出逆序後的字符串。
輸入樣例:Hello World!輸出樣例:
!dlroW olleH#include <stdio.h> #include <string.h> int main() { char str[81]; int k; gets(str); k = strlen(str); k -= 1; for ( k; k>=0; k-- ) { printf("%c", str[k]); } printf("\n"); return 0; }
輸入一個字符串和一個非負整數N,要求將字符串循環左移N次。
輸入格式:
輸入在第1行中給出一個不超過100個字符長度的、以回車結束的非空字符串;第2行給出非負整數N。
輸出格式:
在一行中輸出循環左移N次後的字符串。
輸入樣例:Hello World! 2輸出樣例:
llo World!He#include <stdio.h> #include <string.h> char str[103]; int main() { int i, k, n; gets(str); k = strlen(str); scanf("%d", &n); if ( n % k == 0 ) puts(str); else { for ( i=n%k; i<k; i++ ) { printf("%c", str[i]); } for ( i=0; i<n%k; i++ ) { printf("%c", str[i]); } printf("\n"); } return 0; }
本題要求編寫程序,計算兩個二維平面向量的和向量。
輸入格式:
輸入在一行中按照「x1 y1 x2 y2」的格式給出兩個二維平面向量V1=(x1, y1)和V2=(x2, y2)的份量。
輸出格式:
在一行中按照「(x, y)」的格式輸出和向量,座標輸出小數點後1位(注意不能輸出-0.0)。
輸入樣例:3.5 -2.7 -13.9 8.7輸出樣例:
(-10.4, 6.0)#include <stdio.h> #include <math.h> #define EPSILON 0.05 struct Vector { double x; double y; }; int main(void) { struct Vector v1, v2, v3; scanf("%lf%lf%lf%lf", &v1.x, &v1.y, &v2.x, &v2.y); v3.x = v1.x + v2.x; v3.y = v1.y + v2.y; if(fabs(v3.x) < EPSILON) v3.x = fabs(v3.x); if(fabs(v3.y) < EPSILON) v3.y = fabs(v3.y); printf("(%.1f, %.1f)\n", v3.x, v3.y); return 0; }
通信錄中的一條記錄包含下述基本信息:朋友的姓名、出生日期、性別、固定電話號碼、移動電話號碼。本題要求編寫程序,錄入N條記錄,而且根據要求顯示任意某條記錄。
輸入格式:
輸入在第1行給出正整數N(<=10);隨後N行,每行按照格式「姓名 生日 性別 固話 手機」給出一條記錄。其中「姓名」是不超過10個字符、不包含空格的非空字符串;生日按「yyyy/mm/dd」的格式給出年月日;性別用「M」表示「男」、「F」表示「女」;「固話」和「手機」均爲不超過15位的連續數字,前面有可能出現「+」。
在通信錄記錄輸入完成後,最後一行給出正整數K,而且隨後給出K個整數,表示要查詢的記錄編號(從0到N-1順序編號)。數字間以空格分隔。
輸出格式:
對每一條要查詢的記錄編號,在一行中按照「姓名 固話 手機 性別 生日」的格式輸出該記錄。若要查詢的記錄不存在,則輸出「Not Found」。
輸入樣例:3 Chris 1984/03/10 F +86181779452 13707010007 LaoLao 1967/11/30 F 057187951100 +8618618623333 QiaoLin 1980/01/01 M 84172333 10086 2 1 7輸出樣例:
LaoLao 057187951100 +8618618623333 F 1967/11/30 Not Found#include <stdio.h> #define N 10 struct Person { char name[11]; char birthday[11]; char sex; char fixed[17]; char mobile[17]; }; int main(void) { struct Person p[N]; int num[N]; int i, n, k; scanf("%d", &n); for(i = 0; i < n; ++i) scanf("%s %s %c %s %s", p[i].name, p[i].birthday, &p[i].sex, p[i].fixed, p[i].mobile); scanf("%d", &k); for(i = 0; i < k; ++i) scanf("%d", &num[i]); for(i = 0; i < k; ++i) { if(num[i] >= 0 && num[i] < n) printf("%s %s %s %c %s\n", p[num[i]].name, p[num[i]].fixed, p[num[i]].mobile, p[num[i]].sex, p[num[i]].birthday); else printf("Not Found\n"); } return 0; }