PTA|團體程序設計天梯賽-練習題目題解錦集(C/C++)(持續更新中……)


PTA|團體程序設計天梯賽-練習題目題解錦集(持續更新中)

實現語言:C/C++;      歡迎各位看官交流討論、指導題解錯誤;或者分享更快的方法!!

題目鏈接:https://pintia.cn/problem-sets/994805046380707840/problems


目錄

(點擊對應題目即可進入相應題解……小聲BB……)

L1-001 Hello World (5 分)

L1-002 打印沙漏 (20 分)

L1-003 個位數統計 (15 分)

L1-004 計算攝氏溫度 (5 分)

L1-005 考試座位號 (15 分)

L1-006 連續因子 (20 分)

L1-007 念數字 (10 分)

L1-008 求整數段和 (10 分)

L1-009 N個數求和 (20 分)

L1-010 比較大小 (10 分)

L1-011 A-B (20 分)

L1-012 計算指數 (5 分)

L1-013 計算階乘和 (10 分)

L1-014 簡單題 (5 分)

L1-015 跟奧巴馬一起畫方塊 (15 分)

L1-016 查驗身份證 (15 分)

L1-017 到底有多二 (15 分)

L1-018 大笨鍾 (10 分)

L1-019 誰先倒 (15 分)

L1-020 帥到沒朋友 (20 分)

L1-021 重要的話說三遍 (5 分)

L1-022 奇偶分家 (10 分)

L1-023 輸出GPLT (20 分)

L1-024 后天 (5 分)

L1-025 正整數A+B (15 分)

L1-026 I Love GPLT (5 分)

L1-027 出租 (20 分)

L1-028 判斷素數 (10 分)

L1-029 是不是太胖了 (5 分)

L1-030 一幫一 (15 分)

L1-031 到底是不是太胖了 (10 分)

L1-032 Left-pad (20 分)

L1-033 出生年 (15 分)

L1-034 點贊 (20 分)

L1-035 情人節 (15 分)

L1-036 A乘以B (5 分)

L1-037 A除以B (10 分)

L1-038 新世界 (5 分)

L1-039 古風排版 (20 分)

L1-040 最佳情侶身高差 (10 分)

L1-041 尋找250 (10 分)

L1-042 日期格式化 (5 分)

L1-043 閱覽室 (20 分)

L1-044 穩贏 (15 分)

L1-045 宇宙無敵大招呼 (5 分)

L1-046 整除光棍 (20 分)

L1-047 裝睡 (10 分)

L1-048 矩陣A乘以B (15 分)

L1-049 天梯賽座位分配 (20 分)

L1-050 倒數第N個字符串 (15 分)

L1-051 打折 (5 分)

L1-052 2018我們要贏 (5 分)

L1-053 電子汪 (10 分)

L1-054 福到了 (15 分)

L1-055 誰是贏家 (10 分)

L1-056 猜數字 (20 分)

                 持續更新中……


L1-001 Hello World (5 分)

這道超級簡單的題目沒有任何輸入。

你只需要在一行中輸出著名短句“Hello World!”就可以了。

輸入樣例:

輸出樣例:

Hello World!

題目代碼:

#include<stdio.h> int main() { printf("Hello World!\n"); return 0; }

L1-002 打印沙漏 (20 分)

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。

輸入格式:

輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。

輸出格式:

首先打印出由給定符號組成的最大的沙漏形狀,最后在一行中輸出剩下沒用掉的符號數。

輸入樣例:

19 *

輸出樣例:

*****
 ***
  *
 ***
*****
2

 題目代碼:

#include <stdio.h> int main() { int n; char c; scanf("%d %c",&n,&c); int sum=1;//沙漏需要的字符個數 int i=1;//層數 while(sum<=n) { sum+=2*(2*(i+1)-1);//2n-1是一層的個數,乘以2代表兩層一共需要的 if(sum<=n) i++; } int j,k; for(j=0;j<i;j++)//打印上半部分 { for(k=0;k<j;k++) printf(" "); for(k=0;k<2*(i-j)-1;k++) { printf("%c",c); }//輸出* printf("\n"); } for(j=2;j<=i;j++) { for(k=0;k<i-j;k++) printf(" "); for(k=0;k<2*j-1;k++) { printf("%c",c); } printf("\n"); } printf("%d",n-(sum-2*(2*(i+1)-1))); }

L1-003 個位數統計 (15 分)

給定一個 k 位整數 N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d​0​​ (0≤d​i​​≤9, i=0,⋯,k−1, d​k−1​​>0),請編寫程序統計每種不同的個位數字出現的次數。例如:給定 N=100311,則有 2 個 0,3 個 1,和 1 個 3。

輸入格式:

每個輸入包含 1 個測試用例,即一個不超過 1000 位的正整數 N。

輸出格式:

對 N 中每一種不同的個位數字,以 D:M 的格式在一行中輸出該位數字 D 及其在 N 中出現的次數 M。要求按 D 的升序輸出。

輸入樣例:

100311

輸出樣例:

0:2
1:3
3:1

題目代碼:

#include<iostream> #include<cstring> #define MAXN 1001 using namespace std; int main() { char s[MAXN]; int book[10]={0}; scanf("%s",s); for(int i=0;i<strlen(s);i++) book[s[i]-48]++; for(int i=0;i<10;i++) { if(book[i]!=0) cout << i << ":" << book[i] << endl; } return 0; }

L1-004 計算攝氏溫度 (5 分)

給定一個華氏溫度F,本題要求編寫程序,計算對應的攝氏溫度C。計算公式:C=5×(F−32)/9。題目保證輸入與輸出均在整型范圍內。

輸入格式:

輸入在一行中給出一個華氏溫度。

輸出格式:

在一行中按照格式“Celsius = C”輸出對應的攝氏溫度C的整數值。

輸入樣例:

150

輸出樣例:

Celsius = 65

題目代碼:

#include<iostream> using namespace std; int main() { int n,c; scanf("%d",&n); c=5*(n-32)/9; printf("Celsius = %d\n",c); return 0; } 

L1-005 考試座位號 (15 分)

每個 PAT 考生在參加考試時都會被分配兩個座位號,一個是試機座位,一個是考試座位。正常情況下,考生在入場時先得到試機座位號碼,入座進入試機狀態后,系統會顯示該考生的考試座位號碼,考試時考生需要換到考試座位就座。但有些考生遲到了,試機已經結束,他們只能拿着領到的試機座位號碼求助於你,從后台查出他們的考試座位號碼。

輸入格式:

輸入第一行給出一個正整數 N(≤1000),隨后 N 行,每行給出一個考生的信息:准考證號 試機座位號 考試座位號。其中准考證號由 14 位數字組成,座位從 1 到 N 編號。輸入保證每個人的准考證號都不同,並且任何時候都不會把兩個人分配到同一個座位上。

考生信息之后,給出一個正整數 M(≤N),隨后一行中給出 M 個待查詢的試機座位號碼,以空格分隔。

輸出格式:

對應每個需要查詢的試機座位號碼,在一行中輸出對應考生的准考證號和考試座位號碼,中間用 1 個空格分隔。

輸入樣例:

4
10120150912233 2 4
10120150912119 4 1
10120150912126 1 3
10120150912002 3 2
2
3 4

輸出樣例:

10120150912002 2
10120150912119 1

題目代碼:

//L1-005 考試座位號 #include<iostream> #define MAXN 1001 using namespace std; struct STU{ char s[15]; int shiji; int kaoshi; }; int main() { struct STU stu[MAXN]={0}; int N,M; // int a[MAXN][MAXN]={0}; cin >> N; for(int i=0;i<N;i++) scanf("%s %d %d",stu[i].s,&stu[i].shiji,&stu[i].kaoshi); int k; scanf("%d",&M); for(int i=0;i<M;i++) { scanf("%d",&k); for(int j=0;j<N;j++) if(k==stu[j].shiji) { cout << stu[j].s << " " << stu[j].kaoshi << endl; break; } } return 0; }

L1-006 連續因子 (20 分)

一個正整數 N 的因子中可能存在若干連續的數字。例如 630 可以分解為 3×5×6×7,其中 5、6、7 就是 3 個連續的數字。給定任一正整數 N,要求編寫程序求出最長連續因子的個數,並輸出最小的連續因子序列。

輸入格式:

輸入在一行中給出一個正整數 N(1<N<2​31​​)。

輸出格式:

首先在第 1 行輸出最長連續因子的個數;然后在第 2 行中按 因子1*因子2*……*因子k 的格式輸出最小的連續因子序列,其中因子按遞增順序輸出,1 不算在內。

輸入樣例:

630

輸出樣例:

3
5*6*7

題目代碼 :

#include<iostream> #include<cmath> using namespace std; typedef long long ll; int main() { ll n; cin>>n; ll prd=0;//定義乘積 int start=0,len=0;//定義最終得到序列開始的因子,序列的長度 for(int i=2;i<=sqrt(n);i++)//i從2到根號n { prd=1; for(int j=i;prd*j<=n;j++)//從j開始一直乘到N為止,每次乘積判定是否小於等於N,若超過N,則結束循環 { prd*=j;//乘積迭代 if(n%prd==0&&j-i+1>len)//如果當前乘積為N的乘積因子且長度大於上一次 {//更新序列起始因子和長度 start=i; len=j-i+1; } } } if(start==0)//若起始因子為0,說明N為質數,因為質數=1*本身,而循環最多能表示1*本身的根號 { start=n; len=1; } cout<<len<<'\n'<<start; for(int i=start+1;i<start+len;i++)//輸出,如果因子只有一個只輸出一個 cout<<'*'<<i; return 0; }

L1-007 念數字 (10 分)

輸入一個整數,輸出每個數字對應的拼音。當整數為負數時,先輸出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

題目代碼:

//L1-007 念數字 #include<iostream> #include<cmath> #include<cstring> using namespace std; int main(){ char ch[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; char s[1001]; cin >> s; int k=strlen(s); if(s[0]=='-') { cout << "fu "; for(int i=1;i<k;i++) { if(i!=k-1) cout << ch[s[i]-48] << " "; } } else { for(int i=0;i<k;i++) if(i!=k-1) cout << ch[s[i]-48] << " "; } cout << ch[s[k-1]-48]; // cout << endl; return 0; }

L1-008 求整數段和 (10 分)

給定兩個整數A和B,輸出從A到B的所有整數以及這些數的和。

輸入格式:

輸入在一行中給出2個整數A和B,其中−100≤A≤B≤100,其間以空格分隔。

輸出格式:

首先順序輸出從A到B的所有整數,每5個數字占一行,每個數字占5個字符寬度,向右對齊。最后在一行中按Sum = X的格式輸出全部數字的和X

輸入樣例:

-3 8

輸出樣例:

   -3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30

題目代碼 :

//L1-008 求整數段和 #include<iostream> using namespace std; int main() { int a,b,sum=0,count=0; scanf("%d%d",&a,&b); for(int i=a;i<=b;i++) { printf("%5d",i); sum+=i; count++; if(count%5==0) printf("\n"); } if((b-a+1)%5==0) printf("Sum = %d\n",sum); else printf("\nSum = %d\n",sum); return 0; } 

L1-009 N個數求和 (20 分)

本題的要求很簡單,就是求N個數字的和。麻煩的是,這些數字是以有理數分子/分母的形式給出的,你輸出的和也必須是有理數的形式。

輸入格式:

輸入第一行給出一個正整數N(≤100)。隨后一行按格式a1/b1 a2/b2 ...給出N個有理數。題目保證所有分子和分母都在長整型范圍內。另外,負數的符號一定出現在分子前面。

輸出格式:

輸出上述數字和的最簡形式 —— 即將結果寫成整數部分 分數部分,其中分數部分寫成分子/分母,要求分子小於分母,且它們沒有公因子。如果結果的整數部分為0,則只輸出分數部分。

輸入樣例1:

5
2/5 4/15 1/30 -2/60 8/3

輸出樣例1:

3 1/3

輸入樣例2:

2
4/3 2/3

輸出樣例2:

2

輸入樣例3:

3
1/3 -1/6 1/8

輸出樣例3:

7/24

題目代碼:

#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define LL long long using namespace std; LL gcd(LL a,LL b)///求最大公約數 { return a%b==0?b:gcd(b,a%b); } int main() { LL t,a[101],b[101],s1=0,s2=0; scanf("%lld",&t); for(int i=0; i<t; i++) scanf("%lld/%lld",&a[i],&b[i]); s2=b[0]; for(int i=1; i<t; i++) s2=s2/gcd(s2,b[i])*b[i];///求出所有分數的公分母 for(int i=0; i<t; i++) s1+=s2/b[i]*a[i];///求分子總和 LL n=s1/s2,m=abs(s1%s2); if(m==0) printf("%lld\n",n); else { if(n!=0)printf("%lld ",n); if(s1<0&&n==0)printf("-"); printf("%lld/%lld\n",m/gcd(s2,m),s2/gcd(s2,m)); } return 0; }

L1-010 比較大小 (10 分)

本題要求將輸入的任意3個整數從小到大輸出。

輸入格式:

輸入在一行中給出3個整數,其間以空格分隔。

輸出格式:

在一行中將3個整數從小到大輸出,其間以“->”相連。

輸入樣例:

4 2 8

輸出樣例:

2->4->8

題目代碼:

//L1-010 比較大小 #include<iostream> using namespace std; int main() { int a,b,c,t; cin >> a >> b >> c; if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } cout << a << "->" << b << "->" << c << endl; return 0; }

L1-011 A-B (20 分)

本題要求你計算A−B。不過麻煩的是,A和B都是字符串 —— 即從字符串A中把字符串B所包含的字符全刪掉,剩下的字符組成的就是字符串A−B。

輸入格式:

輸入在2行中先后給出字符串A和B。兩字符串的長度都不超過10​4​​,並且保證每個字符串都是由可見的ASCII碼和空白字符組成,最后以換行符結束。

輸出格式:

在一行中打印出A−B的結果字符串。

輸入樣例:

I love GPLT!  It's a fun game!
aeiou

輸出樣例:

I lv GPLT!  It's  fn gm!

 題目代碼:

#include <iostream> #include<string> using namespace std; int book[256]; int main() { string s, a; getline(cin, s); getline(cin, a); for(int i = 0; i < a.length(); i++) { book[a[i]] = 1; } for(int i = 0; i < s.length(); i++) { if(book[s[i]] == 1) { continue; } cout << s[i]; } return 0; }

L1-012 計算指數 (5 分)

真的沒騙你,這道才是簡單題 —— 對任意給定的不超過 10 的正整數 n,要求你輸出 2​n​​。不難吧?

輸入格式:

輸入在一行中給出一個不超過 10 的正整數 n。

輸出格式:

在一行中按照格式 2^n = 計算結果 輸出 2​n​​ 的值。

輸入樣例:

5

輸出樣例:

2^5 = 32

 題目代碼:

//L1-012 計算指數 #include<iostream> #include<cmath> using namespace std; typedef long long LL; int main() { LL n; cin >> n; cout << "2^" << n << " = " << pow(2,n); return 0; }

L1-013 計算階乘和 (10 分)

對於給定的正整數N,需要你計算 S=1!+2!+3!+...+N!。

輸入格式:

輸入在一行中給出一個不超過10的正整數N。

輸出格式:

在一行中輸出S的值。

輸入樣例:

3

輸出樣例:

9

 題目代碼:

//L1-013 計算階乘和 #include<iostream> using namespace std; int main() { int n; cin >> n; if(n==1) cout << "1\n"; else if(n==2) cout << "3\n"; else if(n==3) cout << "9\n"; else if(n==4) cout << "33\n"; else if(n==5) cout << "153\n"; else if(n==6) cout << "873\n"; else if(n==7) cout << "5913\n"; else if(n==8) cout << "46233\n"; else if(n==9) cout << "409113\n"; else cout << "4037913\n"; return 0; }

L1-014 簡單題 (5 分)

這次真的沒騙你 —— 這道超級簡單的題目沒有任何輸入。

你只需要在一行中輸出事實:This is a simple problem. 就可以了。

輸入樣例:

輸出樣例:

This is a simple problem.

 題目代碼:

#include<iostream> using namespace std; int main() { cout << "This is a simple problem.\n"; return 0; }

L1-015 跟奧巴馬一起畫方塊 (15 分)

美國總統奧巴馬不僅呼吁所有人都學習編程,甚至以身作則編寫代碼,成為美國歷史上首位編寫計算機代碼的總統。2014年底,為慶祝“計算機科學教育周”正式啟動,奧巴馬編寫了很簡單的計算機代碼:在屏幕上畫一個正方形。現在你也跟他一起畫吧!

輸入格式:

輸入在一行中給出正方形邊長N(3≤N≤21)和組成正方形邊的某種字符C,間隔一個空格。

輸出格式:

輸出由給定字符C畫出的正方形。但是注意到行間距比列間距大,所以為了讓結果看上去更像正方形,我們輸出的行數實際上是列數的50%(四舍五入取整)。

輸入樣例:

10 a

輸出樣例:

aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

 題目代碼:

//L1-015 跟奧巴馬一起畫方塊 #include<iostream> using namespace std; int main() { int a,b; char c; cin >> a; getchar(); cin >> c; if(a%2!=0) b=a/2+1; else b=a/2; for(int i=1;i<=b;i++) { for(int j=1;j<=a;j++) cout << c; cout <<"\n"; } return 0; } 

L1-016 查驗身份證 (15 分)

一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下:

首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后將計算的和對11取模得到值Z;最后按照以下關系對應Z值與校驗碼M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

現在給定一些身份證號碼,請你驗證校驗碼的有效性,並輸出有問題的號碼。

輸入格式:

輸入第一行給出正整數N(≤100)是輸入的身份證號碼的個數。隨后N行,每行給出1個18位身份證號碼。

輸出格式:

按照輸入的順序每行輸出1個有問題的身份證號碼。這里並不檢驗前17位是否合理,只檢查前17位是否全為數字且最后1位校驗碼計算准確。如果所有號碼都正常,則輸出All passed

輸入樣例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

輸出樣例1:

12010X198901011234
110108196711301866
37070419881216001X

輸入樣例2:

2
320124198808240056
110108196711301862

輸出樣例2:

All passed

 題目代碼:

//L1-016 查驗身份證 #include<iostream> using namespace std; int quan[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char jiao[]={'1','0','X','9','8','7','6','5','4','3','2'}; char id[20]; bool jiaoyan() { int sum=0,flag=1; for(int i=0;i<17;i++) { if(id[i]>='0'&&id[i]<='9') { sum+=(id[i]-48)*quan[i]; // cout << "id[" <<i << "]\t" << id[i] << endl; // cout << "quan[" << i << "]\t" << quan[i] << endl; } else { flag=0; break; } } // cout << sum << endl; if(flag) { sum%=11; if(id[17]==jiao[sum]) return true; else return false; } else return false; } int main() { int n,ans=0,k; cin >> n; k=n; while(k--) { cin >> id; if(jiaoyan()) ans++; else cout << id << endl; } if(ans==n) cout << "All passed\n"; return 0; }

L1-017 到底有多二 (15 分)

一個整數“犯二的程度”定義為該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍;如果還是個偶數,則再增加1倍。例如數字-13142223336是個11位數,其中有3個2,並且是負數,也是偶數,則它的犯二程度計算為:3/11×1.5×2×100%,約為81.82%。本題就請你計算一個給定整數到底有多二。

輸入格式:

輸入第一行給出一個不超過50位的整數N

輸出格式:

在一行中輸出N犯二的程度,保留小數點后兩位。

輸入樣例:

-13142223336

輸出樣例:

81.82%

 題目代碼:

//L1-017 到底有多二 #include<iostream> #include<cstring> #define MAXN 51 using namespace std; int main() { char num[MAXN]; int len,ans=0; float sum=1.0; cin >> num; for(int i=0;i<strlen(num);i++) { if(num[i]=='2') ans++; } if(num[0]=='-') { sum*=1.5; len=strlen(num)-1; if(num[len]%2==0) sum*=2.0; } else { len=strlen(num); if(num[len-1]%2==0) sum*=2.0; } sum=sum*ans/(float)len; sum*=100000; //五位數 int k=int(sum); int ge,shi,bai,qian,wan; ge=k%10; shi=(k%100-ge)/10; wan=k/10000; qian=k/1000-wan*10; bai=k/100-qian*10-wan*100; if(ge>4) shi++; if(wan!=0) cout << wan << qian << "." << bai << shi << "%\n"; else cout << qian << "." << bai << shi << "%\n"; return 0; }

L1-018 大笨鍾 (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.

 題目代碼:

//L1-018 大笨鍾 #include<iostream> using namespace std; int main() { char c[5]; int dang=0; cin >> c; if(c[0]=='0') cout << "Only "<< c <<". Too early to Dang."; else if(c[0]=='1'&&(c[0]-48+c[1]-48)<3) cout << "Only "<< c <<". Too early to Dang."; else if(c[0]=='1'&&c[1]=='2') { if(c[3]>'0'||c[4]>'0') cout << "Dang"; else cout << "Only "<< c <<". Too early to Dang."; } else if(c[0]=='1'&&(c[0]-48+c[1]-48)>3) { if(c[3]>'0'||c[4]>'0') dang++; dang+=c[1]-50; for(int i=0;i<dang;i++) cout << "Dang"; } else if(c[0]=='2') { if(c[3]>'0'||c[4]>'0') dang++; dang+=(c[1]-40); for(int i=0;i<dang;i++) cout << "Dang"; } cout << endl; return 0; }

L1-019 誰先倒 (15 分)

划拳是古老中國酒文化的一個有趣的組成部分。酒桌上兩人划拳的方法為:每人口中喊出一個數字,同時用手比划出一個數字。如果誰比划出的數字正好等於兩人喊出的數字之和,誰就輸了,輸家罰一杯酒。兩人同贏或兩人同輸則繼續下一輪,直到唯一的贏家出現。

下面給出甲、乙兩人的酒量(最多能喝多少杯不倒)和划拳記錄,請你判斷兩個人誰先倒。

輸入格式:

輸入第一行先后給出甲、乙兩人的酒量(不超過100的非負整數),以空格分隔。下一行給出一個正整數N(≤100),隨后N行,每行給出一輪划拳的記錄,格式為:

甲喊 甲划 乙喊 乙划

其中是喊出的數字,是划出的數字,均為不超過100的正整數(兩只手一起划)。

輸出格式:

在第一行中輸出先倒下的那個人:A代表甲,B代表乙。第二行中輸出沒倒的那個人喝了多少杯。題目保證有一個人倒下。注意程序處理到有人倒下就終止,后面的數據不必處理。

輸入樣例:

1 1
6
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
15 1 1 16

輸出樣例:

A
1

 題目代碼:

//L1-019 誰先倒 #include<iostream> using namespace std; int main() { int A,B,asum,bsum,n; cin >> A >> B; asum=0;bsum=0; cin >> n; while(n--) { int anum,ahua,bnum,bhua; int sum; cin >> anum >> ahua >> bnum >> bhua; sum=anum+bnum; //A win && B lose if(sum==ahua&&sum!=bhua) asum++; //B win && A lose if(sum==bhua&&sum!=ahua) bsum++; //A lose if(asum>A) { cout << "A\n" << bsum << endl; break; } if(bsum>B) { cout << "B\n" << asum << endl; break; } } return 0; } 

L1-020 帥到沒朋友 (20 分)

當芸芸眾生忙着在朋友圈中發照片的時候,總有一些人因為太帥而沒有朋友。本題就要求你找出那些帥到沒有朋友的人。

輸入格式:

輸入第一行給出一個正整數N(≤100),是已知朋友圈的個數;隨后N行,每行首先給出一個正整數K(≤1000),為朋友圈中的人數,然后列出一個朋友圈內的所有人——為方便起見,每人對應一個ID號,為5位數字(從00000到99999),ID間以空格分隔;之后給出一個正整數M(≤10000),為待查詢的人數;隨后一行中列出M個待查詢的ID,以空格分隔。

注意:沒有朋友的人可以是根本沒安裝“朋友圈”,也可以是只有自己一個人在朋友圈的人。雖然有個別自戀狂會自己把自己反復加進朋友圈,但題目保證所有K超過1的朋友圈里都至少有2個不同的人。

輸出格式:

按輸入的順序輸出那些帥到沒朋友的人。ID間用1個空格分隔,行的首尾不得有多余空格。如果沒有人太帥,則輸出No one is handsome

注意:同一個人可以被查詢多次,但只輸出一次。

輸入樣例1:

3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888

輸出樣例1:

10000 88888 23333

輸入樣例2:

3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111

輸出樣例2:

No one is handsome

 題目代碼:

//L1-020 帥到沒朋友 #include<iostream> using namespace std; int main() { int n,m,k,flag,data; int id[100002]={0}; int cool[100002]={0}; int top=1,ctop=1; cin >> n; for(int i=0;i<n;i++) { cin >> m; if(m==1) { cin >> data; cool[ctop++]=data; } else { while(m--) { flag=1; cin >> data; id[top++]=data; } } } cin >> k; while(k--) { flag=1; cin >> data; for(int i=1;i<=top;i++) if(id[i]==data) { flag=0; break; } for(int i=1;i<=ctop;i++) if(cool[i]==data) { flag=0; break; } if(flag) cool[ctop++]=data; } if(ctop==1) cout << "No one is handsome\n"; else { for(int i=1;i<ctop-1;i++) printf("%05d ",id[i]); printf("%05d\n",id[ctop-1]); } return 0; }

L1-021 重要的話說三遍 (5 分)

這道超級簡單的題目沒有任何輸入。

你只需要把這句很重要的話 —— “I'm gonna WIN!”——連續輸出三遍就可以了。

注意每遍占一行,除了每行的回車不能有任何多余字符。

輸入樣例:

輸出樣例:

I'm gonna WIN!
I'm gonna WIN!
I'm gonna WIN!

題目代碼:

#include<iostream> using namespace std; int main() { for(int i=0;i<3;i++) cout <<"I'm gonna WIN!\n"; return 0; }

L1-022 奇偶分家 (10 分)

給定N個正整數,請統計奇數和偶數各有多少個?

輸入格式:

輸入第一行給出一個正整N(≤1000);第2行給出N個正整數,以空格分隔。

輸出格式:

在一行中先后輸出奇數的個數、偶數的個數。中間以1個空格分隔。

輸入樣例:

9
88 74 101 26 15 0 34 22 77

輸出樣例:

3 6

 題目代碼:

//L1-022 奇偶分家 #include<iostream> using namespace std; int main() { int n,m; int ji=0,ou=0; cin >> n; while(n--) { cin >> m; if(m%2==0) ou++; else ji++; } cout << ji << " " << ou << endl; return 0; }

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 分)

題的目標很簡單,就是求兩個正整數AB的和,其中AB都在區間[1,1000]。稍微有點麻煩的是,輸入並不保證是兩個正整數。

輸入格式:

輸入在一行給出AB,其間以空格分開。問題是AB不一定是滿足要求的正整數,有時候可能是超出范圍的數字、負數、帶小數點的實數、甚至是一堆亂碼。

注意:我們把輸入中出現的第1個空格認為是AB的分隔。題目保證至少存在一個空格,並且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]=1index[1]=0 對應 arr[0]=8index[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行,每行給出一個小於2​31​​的需要判斷的正整數。

輸出格式:

對每個需要判斷的正整數,如果它是素數,則在一行中輸出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; } 

L1-030 一幫一 (15 分)

“一幫一學習小組”是中小學中常見的學習組織方式,老師把學習成績靠前的學生跟學習成績靠后的學生排在一組。本題就請你編寫程序幫助老師自動完成這個分配工作,即在得到全班學生的排名后,在當前尚未分組的學生中,將名次最靠前的學生與名次最靠后的異性學生分為一組。

輸入格式:

輸入第一行給出正偶數N(≤50),即全班學生的人數。此后N行,按照名次從高到低的順序給出每個學生的性別(0代表女生,1代表男生)和姓名(不超過8個英文字母的非空字符串),其間以1個空格分隔。這里保證本班男女比例是1:1,並且沒有並列名次。

輸出格式:

每行輸出一組兩個學生的姓名,其間以1個空格分隔。名次高的學生在前,名次低的學生在后。小組的輸出順序按照前面學生的名次從高到低排列。

輸入樣例:

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

 題目代碼:

//L1-030 一幫一 #include<iostream> using namespace std; struct STU{ int data; char name[10]; }; int main() { int n,s,i; struct STU boy[26],girl[26]; //隊列初始化 int btop=1,gtop=1; int bdi=1,gdi=1; cin >> n; for(i=1;i<=n;i++) { cin >> s; getchar(); if(s==1) { cin >> boy[btop].name; boy[btop].data=i; btop++; } if(s==0) { cin >> girl[gtop].name; girl[gtop].data=i; gtop++; } } for(int i=1;i<=n/2;i++) { if(boy[bdi].data==i) { cout << boy[bdi].name << " " << girl[--gtop].name <<endl; bdi++; continue; } if(girl[gdi].data==i) { cout << girl[gdi].name << " " << boy[--btop].name << endl; gdi++; continue; } } return 0; }

L1-031 到底是不是太胖了 (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!

輸入樣例:

3
169 136
150 81
178 155

輸出樣例:

You are wan mei!
You are tai shou le!
You are tai pang le!

 題目代碼:

//L1-031 到底是不是太胖了 #include<stdio.h> #include<math.h> #include<stdlib.h> int main(void) { int n,h,w; float min,max; scanf("%d",&n); while(n--){ scanf("%d%d",&h,&w); min=(h-100)*0.9*2*0.9; max=(h-100)*0.9*2*1.1; if(w>min&&w<max) printf("You are wan mei!\n"); else if(w<=min) printf("You are tai shou le!\n"); else printf("You are tai pang le!\n"); } return 0; }

L1-032 Left-pad (20 分)

根據新浪微博上的消息,有一位開發者不滿NPM(Node Package Manager)的做法,收回了自己的開源代碼,其中包括一個叫left-pad的模塊,就是這個模塊把javascript里面的React/Babel干癱瘓了。這是個什么樣的模塊?就是在字符串前填充一些東西到一定的長度。例如用*去填充字符串GPLT,使之長度為10,調用left-pad的結果就應該是******GPLT。Node社區曾經對left-pad緊急發布了一個替代,被嚴重吐槽。下面就請你來實現一下這個模塊。

輸入格式:

輸入在第一行給出一個正整數N(≤10​4​​)和一個字符,分別是填充結果字符串的長度和用於填充的字符,中間以1個空格分開。第二行給出原始的非空字符串,以回車結束。

輸出格式:

在一行中輸出結果字符串。

輸入樣例1:

15 _
I love GPLT

輸出樣例1:

____I love GPLT

輸入樣例2:

4 *
this is a sample for cut

輸出樣例2:

 cut

 題目代碼:

//L1-032 Left-pad #include<iostream> #include<string> #include<cstdlib> using namespace std; int main() { int n; char c; string s; cin >> n; getchar(); cin >> c; getchar(); getline(cin,s); int len=s.length(); // cout << len; // system("pause"); if(n>len) { for(int i=1;i<=n-len;i++) printf("%c",c); cout << s << endl; } else if(n==len) cout << s << endl; else if(n<len) { for(int i=len-n;i<=len-1;i++) cout << s.at(i); cout << endl; } return 0; }

L1-033 出生年 (15 分)

以上是新浪微博中一奇葩貼:“我出生於1988年,直到25歲才遇到4個數字都不相同的年份。”也就是說,直到2013年才達到“4個數字都不相同”的要求。本題請你根據要求,自動填充“我出生於y年,直到x歲才遇到n個數字都不相同的年份”這句話。

輸入格式:

輸入在一行中給出出生年份y和目標年份中不同數字的個數n,其中y在[1, 3000]之間,n可以是2、或3、或4。注意不足4位的年份要在前面補零,例如公元1年被認為是0001年,有2個不同的數字0和1。

輸出格式:

根據輸入,輸出x和能達到要求的年份。數字間以1個空格分隔,行首尾不得有多余空格。年份要按4位輸出。注意:所謂“n個數字都不相同”是指不同的數字正好是n個。如“2013”被視為滿足“4位數字都不同”的條件,但不被視為滿足2位或3位數字不同的條件。

輸入樣例1:

1988 4

輸出樣例1:

25 2013

輸入樣例2:

1 2

輸出樣例2:

0 0001

 題目代碼:

//L1-033 出生年 #include<iostream> #include<string> using namespace std; int main() { int n,ans=0; string y; cin >> y >> n; if(y.size()==1) y.insert(0,3,'0'); else if(y.size()==2) y.insert(0,2,'0'); else if(y.size()==3) y.insert(0,1,'0'); while(1) { int book[10]={0}; int sum=0; for(int i=0;i<4;i++) book[y.at(i)-48]++; for(int i=0;i<10;i++) { if(book[i]>0) sum++; } ans++; if(sum==n) break; y.at(3)++; if(y.at(3)>57) { y.at(3)='0'; y.at(2)++; if(y.at(2)>57) { y.at(2)='0'; y.at(1)++; if(y.at(1)>57) { y.at(1)='0'; y.at(0)++; } } } //cout << y << endl; } cout << ans-1 << " " << y<< endl; return 0; }

L1-034 點贊 (20 分)

微博上有個“點贊”功能,你可以為你喜歡的博文點個贊表示支持。每篇博文都有一些刻畫其特性的標簽,而你點贊的博文的類型,也間接刻畫了你的特性。本題就要求你寫個程序,通過統計一個人點贊的紀錄,分析這個人的特性。

輸入格式:

輸入在第一行給出一個正整數N(≤1000),是該用戶點贊的博文數量。隨后N行,每行給出一篇被其點贊的博文的特性描述,格式為“K F​1​​⋯F​K​​”,其中1≤K≤10,F​i​​(i=1,⋯,K)是特性標簽的編號,我們將所有特性標簽從1到1000編號。數字間以空格分隔。

輸出格式:

統計所有被點贊的博文中最常出現的那個特性標簽,在一行中輸出它的編號和出現次數,數字間隔1個空格。如果有並列,則輸出編號最大的那個。

輸入樣例:

4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123

輸出樣例:

233 3

 題目代碼:

//L1-034 點贊 (20 分) #include<iostream> #include<algorithm> #define MAXN 1005 using namespace std; struct stack{ int id; int time; }; bool cmp(stack a,stack b) { if(a.time!=b.time) return a.time>b.time; else if(a.id!=b.id) return a.id>b.id; } int main() { stack s[MAXN]; for(int i=0;i<MAXN;i++) s[i].time=0; int N,top=0; cin >> N; while(N--) { int k,m; cin >> k; while(k--) { int flag=0; cin >> m; for(int i=0;i<top;i++) { if(s[i].id==m) { s[i].time++; flag=1; break; } } if(flag==0) { s[top].id=m; s[top].time++; top++; } } } sort(s,s+top,cmp); cout << s[0].id << " " << s[0].time << endl; return 0; }

L1-035 情人節 (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 ...

 題目代碼:

//L1-035 情人節 #include<iostream> #include<string> #include<vector> using namespace std; int main() { int i=1; string str; vector<string> vec; while(1) { cin >> str; if(str.size()==1&&str.at(0)=='.') break; if(i==2) vec.push_back(str); if(i==14) vec.push_back(str); i++; str.clear(); } if(vec.size()==2) cout << vec.at(0) << " and " << vec.at(1) << " are inviting you to dinner...\n"; else if(vec.size()==1) cout << vec.at(0) << " is the only one for you...\n"; else if(vec.size()==0) cout << "Momo... No one is for you ...\n"; return 0; }

L1-036 A乘以B (5 分)

看我沒騙你吧 —— 這是一道你可以在 10 秒內完成的題:給定兩個絕對值不超過 100 的整數 A 和 B,輸出 A 乘以 B 的值。

輸入格式:

輸入在第一行給出兩個整數 A 和 B(−100≤A,B≤100),數字間以空格分隔。

輸出格式:

在一行中輸出 A 乘以 B 的值。

輸入樣例:

-8 13

輸出樣例:

-104

 題目代碼:

#include<iostream> using namespace std; int main() { int a,b; cin >> a >> b; cout << a*b << endl; return 0; }

L1-037 A除以B (10 分)

真的是簡單題哈 —— 給定兩個絕對值不超過100的整數A和B,要求你按照“A/B=商”的格式輸出結果。

輸入格式:

輸入在第一行給出兩個整數A和B(−100≤A,B≤100),數字間以空格分隔。

輸出格式:

在一行中輸出結果:如果分母是正數,則輸出“A/B=商”;如果分母是負數,則要用括號把分母括起來輸出;如果分母為零,則輸出的商應為Error。輸出的商應保留小數點后2位。

輸入樣例1:

-1 2

輸出樣例1:

-1/2=-0.50

輸入樣例2:

1 -3

輸出樣例2:

1/(-3)=-0.33

輸入樣例3:

5 0

輸出樣例3:

5/0=Error

 題目代碼:

#include<iostream> using namespace std; int main() { float a,b; scanf("%f%f",&a,&b); if(b==0) cout << a << "/" << b << "=Error\n"; else if(b<0) { cout << a << "/(" <<b << ")="; printf("%.2f\n",a/b); } else printf("%.0f/%.0f=%.2f\n",a,b,a/b); return 0; }

L1-038 新世界 (5 分)

這道超級簡單的題目沒有任何輸入。

你只需要在第一行中輸出程序員欽定名言“Hello World”,並且在第二行中輸出更新版的“Hello New World”就可以了。

輸入樣例:

輸出樣例:

Hello World
Hello New World

 題目代碼:

#include<iostream> using namespace std; int main() { cout << "Hello World\nHello New World\n"; return 0; }

L1-039 古風排版 (20 分)

中國的古人寫文字,是從右向左豎向排版的。本題就請你編寫程序,把一段文字按古風排版。

輸入格式:

輸入在第一行給出一個正整數N(<100),是每一列的字符數。第二行給出一個長度不超過1000的非空字符串,以回車結束。

輸出格式:

按古風格式排版給定的字符串,每列N個字符(除了最后一列可能不足N個)。

輸入樣例:

4
This is a test case

輸出樣例:

asa T
st ih
e tsi
 ce s

 題目代碼:

//L1-039 古風排版 #include<iostream> #include<string> using namespace std; int main() { int n,m,len; char a[105][105]; string str; cin >> n; getchar(); getline(cin,str); //對二維數組初始化 for(int i=0;i<105;i++) for(int j=0;j<105;j++) a[i][j]=' '; len=str.size(); if(len%n==0) m=len/n; else m=len/n+1; //n行m列 for(int i=0;i<n;i++) { int k=0; for(int j=i;j<len;j+=n) { a[i][k]=str.at(j); k++; } } for(int i=0;i<n;i++) { for(int j=m-1;j>=0;j--) cout << a[i][j]; cout << endl; } return 0; }

L1-040 最佳情侶身高差 (10 分)

專家通過多組情侶研究數據發現,最佳的情侶身高差遵循着一個公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你倆的身高差不管是牽手、擁抱、接吻,都是最和諧的差度。

下面就請你寫個程序,為任意一位用戶計算他/她的情侶的最佳身高。

輸入格式:

輸入第一行給出正整數N(≤10),為前來查詢的用戶數。隨后N行,每行按照“性別 身高”的格式給出前來查詢的用戶的性別和身高,其中“性別”為“F”表示女性、“M”表示男性;“身高”為區間 [1.0, 3.0] 之間的實數。

輸出格式:

對每一個查詢,在一行中為該用戶計算出其情侶的最佳身高,保留小數點后2位。

輸入樣例:

2
M 1.75
F 1.8

輸出樣例:

1.61
1.96

 題目代碼:

//L1-040 最佳情侶身高差 #include<iostream> #define biao 1.09 using namespace std; int main() { int n; cin >> n; while(n--) { char c; float gao; cin >> c; cin >> gao; if(c=='M') printf("%.2f\n",gao/biao); else if(c=='F') printf("%.2f\n",gao*biao); } return 0; }

L1-041 尋找250 (10 分)

對方不想和你說話,並向你扔了一串數…… 而你必須從這一串數字中找到“250”這個高大上的感人數字。

輸入格式:

輸入在一行中給出不知道多少個絕對值不超過1000的整數,其中保證至少存在一個“250”。

輸出格式:

在一行中輸出第一次出現的“250”是對方扔過來的第幾個數字(計數從1開始)。題目保證輸出的數字在整型范圍內。

輸入樣例:

888 666 123 -233 250 13 250 -222

輸出樣例:

5

 題目代碼:

//L1-041 尋找250 #include<iostream> using namespace std; int main() { int n; int i=1,flag,j=1; while(cin >> n) { if(n==250&&j==1) { flag=i; j++; } i++; } cout << flag << endl; return 0; }

L1-042 日期格式化 (5 分)

世界上不同國家有不同的寫日期的習慣。比如美國人習慣寫成“月-日-年”,而中國人習慣寫成“年-月-日”。下面請你寫個程序,自動把讀入的美國格式的日期改寫成中國習慣的日期。

輸入格式:

輸入在一行中按照“mm-dd-yyyy”的格式給出月、日、年。題目保證給出的日期是1900年元旦至今合法的日期。

輸出格式:

在一行中按照“yyyy-mm-dd”的格式給出年、月、日。

輸入樣例:

03-15-2017

輸出樣例:

2017-03-15

 題目代碼:

#include<iostream> using namespace std; int main() { char m1,m2,d1,d2,y1,y2,y3,y4; scanf("%c%c-%c%c-%c%c%c%c",&m1,&m2,&d1,&d2,&y1,&y2,&y3,&y4); getchar(); printf("%c%c%c%c-%c%c-%c%c\n",y1,y2,y3,y4,m1,m2,d1,d2); return 0; }

L1-043 閱覽室 (20 分)

天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號並按下S鍵,程序開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程序結束計時。書號為不超過1000的正整數。當管理員將0作為書號輸入時,表示一天工作結束,你的程序應輸出當天的讀者借書次數和平均閱讀時間。

注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。

輸入格式:

輸入在第一行給出一個正整數N(≤10),隨后給出N天的紀錄。每天的紀錄由若干次借閱操作組成,每次操作占一行,格式為:

書號([1, 1000]內的整數) 鍵值SE發生時間hh:mm,其中hh是[0,23]內的整數,mm是[0, 59]內整數)

每一天的紀錄保證按時間遞增的順序給出。

輸出格式:

對每天的紀錄,在一行中輸出當天的讀者借書次數和平均閱讀時間(以分鍾為單位的精確到個位的整數時間)。

輸入樣例:

3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00

輸出樣例:

2 196
0 0
1 60

 題目代碼:

//L1-043 閱覽室 #include<iostream> #define MAXN 1005 using namespace std; int main() { int n; cin >> n; while(n--) { int a=1; double sum=0; int num=0,minute[MAXN]={0}; bool f[MAXN]={false}; while(a!=0) { char c; int h,m; scanf("%d %c %d:%d",&a,&c,&h,&m); if(a==0) break; //借書 else if(c=='S') { minute[a]=h*60+m; f[a]=true; } else if(c=='E') { //如果有借 繼續處理 if(f[a]) { sum+=h*60+m-minute[a]; f[a]=false; num++; //次數加加 } } } if(num==0) cout << "0 0\n"; else { sum/=num; int t = sum+0.5f; //四舍五入 cout << num << " " << t << endl; } } return 0; }

L1-044 穩贏 (15 分)

大家應該都會玩“錘子剪刀布”的游戲:兩人同時給出手勢,勝負規則如圖所示:

現要求你編寫一個穩贏不輸的程序,根據對方的出招,給出對應的贏招。但是!為了不讓對方輸得太慘,你需要每隔K次就讓一個平局。

輸入格式:

輸入首先在第一行給出正整數K(≤10),即平局間隔的次數。隨后每行給出對方的一次出招:ChuiZi代表“錘子”、JianDao代表“剪刀”、Bu代表“布”。End代表輸入結束,這一行不要作為出招處理。

輸出格式:

對每一個輸入的出招,按要求輸出穩贏或平局的招式。每招占一行。

輸入樣例:

2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End

輸出樣例:

Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu

 題目代碼:

//L1-044 穩贏 #include<iostream> #include<string> using namespace std; int main() { int n,i=1; string str; cin >> n; while(cin >> str) { if(str.at(0)=='E') break; //平局 if(i%(n+1)==0) { if(str.at(0)=='J') cout << "JianDao\n"; else if(str.at(0)=='C') cout << "ChuiZi\n"; else if(str.at(0)=='B') cout << "Bu\n"; } else { if(str.at(0)=='J') cout << "ChuiZi\n"; else if(str.at(0)=='C') cout << "Bu\n"; else if(str.at(0)=='B') cout << "JianDao\n"; } i++; } return 0; }

L1-045 宇宙無敵大招呼 (5 分)

據說所有程序員學習的第一個程序都是在屏幕上輸出一句“Hello World”,跟這個世界打個招呼。作為天梯賽中的程序員,你寫的程序得高級一點,要能跟任意指定的星球打招呼。

輸入格式:

輸入在第一行給出一個星球的名字S,是一個由不超過7個英文字母組成的單詞,以回車結束。

輸出格式:

在一行中輸出Hello S,跟輸入的S星球打個招呼。

輸入樣例:

Mars

輸出樣例:

Hello Mars

 題目代碼:

#include<iostream> #include<string> using namespace std; int main() { string str; cin >> str; cout << "Hello " << str << endl; return 0; }

L1-046 整除光棍 (20 分)

這里所謂的“光棍”,並不是指單身汪啦~ 說的是全部由1組成的數字,比如1、11、111、1111等。傳說任何一個光棍都能被一個不以5結尾的奇數整除。比如,111111就可以被13整除。 現在,你的程序要讀入一個整數x,這個整數一定是奇數並且不以5結尾。然后,經過計算,輸出兩個數字:第一個數字s,表示x乘以s是一個光棍,第二個數字n是這個光棍的位數。這樣的解當然不是唯一的,題目要求你輸出最小的解。

提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除x為止。但難點在於,s可能是個非常大的數 —— 比如,程序輸入31,那么就輸出3584229390681和15,因為31乘以3584229390681的結果是111111111111111,一共15個1。

輸入格式:

輸入在一行中給出一個不以5結尾的正奇數x(<1000)。

輸出格式:

在一行中輸出相應的最小的sn,其間以1個空格分隔。

輸入樣例:

31

輸出樣例:

3584229390681 15

 題目代碼:

//L1-046 整除光棍 #include<iostream> using namespace std; int main() { int x,s=0,n=0;//定義除數,被除數,位數 cin>>x; while(s<x) { s=s*10+1;//被除數末位添1直到不小於被除數 n++;//位數增1 } while(true)//開始進行除法運算 { cout<<s/x;//輸出商 s%=x;//被除數更新為余數 if(s==0)break;//余數為0則結束 s=s*10+1;//余數末位添1 n++;//位數增1 } cout<<' '<<n; return 0; } 

L1-047 裝睡 (10 分)

你永遠叫不醒一個裝睡的人 —— 但是通過分析一個人的呼吸頻率和脈搏,你可以發現誰在裝睡!醫生告訴我們,正常人睡眠時的呼吸頻率是每分鍾15-20次,脈搏是每分鍾50-70次。下面給定一系列人的呼吸頻率與脈搏,請你找出他們中間有可能在裝睡的人,即至少一項指標不在正常范圍內的人。

輸入格式:

輸入在第一行給出一個正整數N(≤10)。隨后N行,每行給出一個人的名字(僅由英文字母組成的、長度不超過3個字符的串)、其呼吸頻率和脈搏(均為不超過100的正整數)。

輸出格式:

按照輸入順序檢查每個人,如果其至少一項指標不在正常范圍內,則輸出其名字,每個名字占一行。

輸入樣例:

4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71

輸出樣例:

Tom
Zoe

 題目代碼:

//L1-047 裝睡 #include<iostream> using namespace std; int main() { int n; cin >> n; while(n--) { char name[5]; int hu,mai; cin >> name >> hu >> mai; if(hu<15||hu>20) cout << name << endl; else if(mai<50||mai>70) cout << name << endl; } return 0; }

L1-048 矩陣A乘以B (15 分)

給定兩個矩陣A和B,要求你計算它們的乘積矩陣AB。需要注意的是,只有規模匹配的矩陣才可以相乘。即若A有R​a​​行、C​a​​列,B有R​b​​行、C​b​​列,則只有C​a​​與R​b​​相等時,兩個矩陣才能相乘。

輸入格式:

輸入先后給出兩個矩陣A和B。對於每個矩陣,首先在一行中給出其行數R和列數C,隨后R行,每行給出C個整數,以1個空格分隔,且行首尾沒有多余的空格。輸入保證兩個矩陣的R和C都是正數,並且所有整數的絕對值不超過100。

輸出格式:

若輸入的兩個矩陣的規模是匹配的,則按照輸入的格式輸出乘積矩陣AB,否則輸出Error: Ca != Rb,其中Ca是A的列數,Rb是B的行數。

輸入樣例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

輸出樣例1:

2 4
20 22 24 16
53 58 63 28

輸入樣例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

輸出樣例2:

Error: 2 != 3

 題目代碼:

//L1-048 矩陣A乘以B #include <bits/stdc++.h> using namespace std; int a[101][101], b[101][101]; int main() { int ra, ca, rb, cb; scanf("%d%d", &ra, &ca); for(int i=0; i<ra; i++) { for(int j=0; j<ca; j++) { scanf("%d", &a[i][j]); } } scanf("%d%d", &rb, &cb); for(int i=0; i<rb; i++) { for(int j=0; j<cb; j++) { scanf("%d", &b[i][j]); } } if(ca == rb) { printf("%d %d\n", ra, cb); for(int i=0; i<ra; i++) { for(int j=0; j<cb; j++) { int sum = 0; for(int k=0; k<ca; k++) { sum += a[i][k]*b[k][j]; } if(j < cb-1) printf("%d ", sum); else printf("%d\n", sum); } } } else printf("Error: %d != %d\n", ca, rb); return 0; }

L1-049 天梯賽座位分配 (20 分)

天梯賽每年有大量參賽隊員,要保證同一所學校的所有隊員都不能相鄰,分配座位就成為一件比較麻煩的事情。為此我們制定如下策略:假設某賽場有 N 所學校參賽,第 i 所學校有 M[i] 支隊伍,每隊 10 位參賽選手。令每校選手排成一列縱隊,第 i+1 隊的選手排在第 i 隊選手之后。從第 1 所學校開始,各校的第 1 位隊員順次入座,然后是各校的第 2 位隊員…… 以此類推。如果最后只剩下 1 所學校的隊伍還沒有分配座位,則需要安排他們的隊員隔位就坐。本題就要求你編寫程序,自動為各校生成隊員的座位號,從 1 開始編號。

輸入格式:

輸入在一行中給出參賽的高校數 N (不超過100的正整數);第二行給出 N 個不超過10的正整數,其中第 i 個數對應第 i 所高校的參賽隊伍數,數字間以空格分隔。

輸出格式:

從第 1 所高校的第 1 支隊伍開始,順次輸出隊員的座位號。每隊占一行,座位號間以 1 個空格分隔,行首尾不得有多余空格。另外,每所高校的第一行按“#X”輸出該校的編號X,從 1 開始。

輸入樣例:

3
3 4 2

輸出樣例:

#1
1 4 7 10 13 16 19 22 25 28
31 34 37 40 43 46 49 52 55 58
61 63 65 67 69 71 73 75 77 79
#2
2 5 8 11 14 17 20 23 26 29
32 35 38 41 44 47 50 53 56 59
62 64 66 68 70 72 74 76 78 80
82 84 86 88 90 92 94 96 98 100
#3
3 6 9 12 15 18 21 24 27 30
33 36 39 42 45 48 51 54 57 60

 題目代碼:

#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { int n; while(~scanf("%d",&n)) { int a[n],b[n],cnt[n]={0},maxn=INT_MIN,flag=1; for(int i=0;i<n;i++) { scanf("%d",&a[i]); b[i]=a[i]; a[i]*=10; if(maxn<a[i]) maxn=a[i]; } if(n==1) // 1的特殊情況 { printf("#1\n"); int from=-1; for(int i=0;i<b[0];i++) { for(int j=0;j<10;j++) { if(j==0) printf("%d",from+=2); else printf(" %d",from+=2); } puts(""); } continue; } sort(b,b+n); if(b[n-1]==b[n-2]) flag=0; vector<int> v[n]; int last=1; int k=1,tmax=b[n-2]*10; for(int j=0;j<maxn;j++) { for(int i=0;i<n;i++) { if(a[i]>cnt[i]) { cnt[i]++; if(cnt[i]>tmax && flag==1) { if(last) { if(k-v[i][tmax-1]!=1) k--; last=0; } k++; v[i].push_back(k++); } else v[i].push_back(k++); } } } for(int i=0;i<n;i++) { printf("#%d\n",i+1); int count=0; for(int j=0;j<a[i];j++) { if(count==0) printf("%d",v[i][j]); else printf(" %d",v[i][j]); count++; if(count>=10) puts(""),count=0; } } } return 0; }

L1-050 倒數第N個字符串 (15 分)

給定一個完全由小寫英文字母組成的字符串等差遞增序列,該序列中的每個字符串的長度固定為 L,從 L 個 a 開始,以 1 為步長遞增。例如當 L 為 3 時,序列為 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。這個序列的倒數第27個字符串就是 zyz。對於任意給定的 L,本題要求你給出對應序列倒數第 N 個字符串。

輸入格式:

輸入在一行中給出兩個正整數 L(2 ≤ L ≤ 6)和 N(≤10​5​​)。

輸出格式:

在一行中輸出對應序列倒數第 N 個字符串。題目保證這個字符串是存在的。

輸入樣例:

3 7417

輸出樣例:

pat

 題目代碼:

//L1-050 倒數第N個字符串 #include<iostream> #include<cmath> using namespace std; int main() { int n,num,total,top=1; char str[10]; cin >> n >> num; total=pow(26,n); num=total-num; //求第num個數 while(n--) { str[top]=num%26+97; num=num/26; top++; } for(int i=top-1;i>0;i--) printf("%c",str[i]); cout << endl; return 0; }

L1-051 打折 (5 分)

去商場淘打折商品時,計算打折以后的價錢是件頗費腦子的事情。例如原價 ¥988,標明打 7 折,則折扣價應該是 ¥988 x 70% = ¥691.60。本題就請你寫個程序替客戶計算折扣價。

輸入格式:

輸入在一行中給出商品的原價(不超過1萬元的正整數)和折扣(為[1, 9]區間內的整數),其間以空格分隔。

輸出格式:

在一行中輸出商品的折扣價,保留小數點后 2 位。

輸入樣例:

988 7

輸出樣例:

691.60

 題目代碼:

//L1-051 打折 #include<iostream> using namespace std; int main() { float jia,zhe; cin >> jia >> zhe; printf("%.2f\n",jia*zhe*0.1); return 0; }

L1-052 2018我們要贏 (5 分)

2018年天梯賽的注冊邀請碼是“2018wmyy”,意思就是“2018我們要贏”。本題就請你用漢語拼音輸出這句話。

輸入格式:

本題沒有輸入。

輸出格式:

在第一行中輸出:“2018”;第二行中輸出:“wo3 men2 yao4 ying2 !”。

輸入樣例:

輸出樣例:

2018
wo3 men2 yao4 ying2 !

 題目代碼:

#include<iostream> using namespace std; int main() { cout << "2018\nwo3 men2 yao4 ying2 !\n"; return 0; }

L1-053 電子汪 (10 分)

據說汪星人的智商能達到人類 4 歲兒童的水平,更有些聰明汪會做加法計算。比如你在地上放兩堆小球,分別有 1 只球和 2 只球,聰明汪就會用“汪!汪!汪!”表示 1 加 2 的結果是 3。

本題要求你為電子寵物汪做一個模擬程序,根據電子眼識別出的兩堆小球的個數,計算出和,並且用汪星人的叫聲給出答案。

輸入格式:

輸入在一行中給出兩個 [1, 9] 區間內的正整數 A 和 B,用空格分隔。

輸出格式:

在一行中輸出 A + B 個Wang!

輸入樣例:

2 1

輸出樣例:

Wang!Wang!Wang!

 題目代碼:

//L1-053 電子汪 #include<iostream> using namespace std; int main() { int a,b; cin >> a >> b; for(int i=0;i<a+b;i++) cout << "Wang!"; cout << endl; return 0; }

L1-054 福到了 (15 分)

“福”字倒着貼,寓意“福到”。不論到底算不算民俗,本題且請你編寫程序,把各種漢字倒過來輸出。這里要處理的每個漢字是由一個 N × N 的網格組成的,網格中的元素或者為字符 @ 或者為空格。而倒過來的漢字所用的字符由裁判指定。

輸入格式:

輸入在第一行中給出倒過來的漢字所用的字符、以及網格的規模 N (不超過100的正整數),其間以 1 個空格分隔;隨后 N 行,每行給出 N 個字符,或者為 @ 或者為空格。

輸出格式:

輸出倒置的網格,如樣例所示。但是,如果這個字正過來倒過去是一樣的,就先輸出bu yong dao le,然后再用輸入指定的字符將其輸出。

輸入樣例 1:

$ 9
 @  @@@@@
@@@  @@@ 
 @   @ @ 
@@@  @@@ 
@@@ @@@@@
@@@ @ @ @
@@@ @@@@@
 @  @ @ @
 @  @@@@@

輸出樣例 1:

$$$$$  $ 
$ $ $  $ 
$$$$$ $$$
$ $ $ $$$
$$$$$ $$$
 $$$  $$$
 $ $   $ 
 $$$  $$$
$$$$$  $ 

輸入樣例 2:

& 3
@@@
 @ 
@@@

輸出樣例 2:

bu yong dao le
&&&
 & 
&&&

 題目代碼:

//L1-054 福到了 #include<iostream> using namespace std; int main() { char m[101][101]; int n,a[101][101]={0},b[101][101]={0}; int k,l; char c; cin >> c >> n; getchar(); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%c",&m[i][j]); if(m[i][j]!=' ') b[i][j]=1; } getchar(); } k=n-1; for(int i=0;i<n;i++) { l=n-1; for(int j=0;j<n;j++) { if(m[k][l]!=' ') a[i][j]=1; l--; } k--; } int flag=1; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(a[i][j]!=b[i][j]) { flag=0; break; } } if(flag==1) cout << "bu yong dao le\n"; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) if(a[i][j]) cout << c; else cout << " "; cout << endl; } return 0; } 

L1-055 誰是贏家 (10 分)

某電視台的娛樂節目有個表演評審環節,每次安排兩位藝人表演,他們的勝負由觀眾投票和 3 名評委投票兩部分共同決定。規則為:如果一位藝人的觀眾票數高,且得到至少 1 名評委的認可,該藝人就勝出;或藝人的觀眾票數低,但得到全部評委的認可,也可以勝出。節目保證投票的觀眾人數為奇數,所以不存在平票的情況。本題就請你用程序判斷誰是贏家。

輸入格式:

輸入第一行給出 2 個不超過 1000 的正整數 Pa 和 Pb,分別是藝人 a 和藝人 b 得到的觀眾票數。題目保證這兩個數字不相等。隨后第二行給出 3 名評委的投票結果。數字 0 代表投票給 a,數字 1 代表投票給 b,其間以一個空格分隔。

輸出格式:

按以下格式輸出贏家:

The winner is x: P1 + P2

其中 x 是代表贏家的字母,P1 是贏家得到的觀眾票數,P2 是贏家得到的評委票數。

輸入樣例:

327 129
1 0 1

輸出樣例:

The winner is a: 327 + 1

 題目代碼:

//L1-055 誰是贏家 #include<iostream> using namespace std; int main() { int pa,pb,n=3; int a=0,b=0; cin >> pa >> pb; while(n--) { int m; cin >> m; if(m==0) a++; else if(m==1) b++; } if(pa>pb&&a>0) cout << "The winner is a: "<< pa << " + " << a << endl; else if(pa<pb&&b>0) cout << "The winner is b: "<< pb << " + " << b << endl; else if(pa>pb&&b==3) cout << "The winner is b: "<< pb << " + " << b << endl; else if(pa<pb&&a==3) cout << "The winner is a: "<< pa << " + " << a << endl; return 0; }

L1-056 猜數字 (20 分)

一群人坐在一起,每人猜一個 100 以內的數,誰的數字最接近大家平均數的一半就贏。本題就要求你找出其中的贏家。

輸入格式:

輸入在第一行給出一個正整數N(≤10​4​​)。隨后 N 行,每行給出一個玩家的名字(由不超過8個英文字母組成的字符串)和其猜的正整數(≤ 100)。

輸出格式:

在一行中順序輸出:大家平均數的一半(只輸出整數部分)、贏家的名字,其間以空格分隔。題目保證贏家是唯一的。

輸入樣例:

7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62

輸出樣例:

22 Amy

 題目代碼:

#include<iostream> #include<string> #include<cmath> using namespace std; struct ndoe{ string name; int num; }arr[10005]; int main(){ int n, sum = 0, min = 99999; string ans; scanf("%d", &n); for(int i = 0; i < n; i++){ string str;int a; cin >> str >> a; arr[i].name = str; arr[i].num = a; sum += a; } double x = sum * 1.0 / n / 2; for(int i = 0; i < n; i++){ if(abs(arr[i].num - x) < min){ min = abs(arr[i].num - x); ans = arr[i].name; } } cout << (int) x << " " << ans; return 0; }

                                                持續更新中……


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM