1. 程式人生 > 其它 >吳凡的題庫——快快程式設計1-50

吳凡的題庫——快快程式設計1-50

  1. A+B Problem
題目描述
輸入兩個整數a,b,輸出它們的和.
題目保證輸入資料的範圍如下:
-1000000000<=a<=1000000000
-1000000000<=b<=1000000000
輸入輸出格式
輸入格式
輸入兩個整數,以空格分開
輸出格式
輸出一個整數
輸入輸出樣例
輸入樣例#1:
20 30
輸出樣例#1:
50
輸入樣例#2:
6 9
輸出樣例#2:
15
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
using namespace std;
int a,b;
int main(){
	cin>>a>>b;
	cout<<a + b;
	return 0;
}
  1. 刪除最大和最小
題目描述
請寫一個程式,輸入n個不同的整數,刪除最大數字和最小數字,依次輸出剩餘n-2個整數。
輸入輸出格式
輸入格式
輸入共兩行:第一行為正整數n,第二行為n個整數。
其中n<=100,數字絕對值不超過100000。
輸出格式
一行共n-2個整數
輸入輸出樣例
輸入樣例#1:
5
10 8 5 2 6
輸出樣例#1:
8 5 6
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n, num[100], maxium=0, minium;
	cin>>n;
	for(int i=0;i<n;i++)cin>>num[i];
	minium=num[0];
	for(int i=0;i<n;i++){
		if(num[i]<minium)minium=num[i];
		if(num[i]>maxium)maxium=num[i];
	}
	for(int i=0;i<n;i++)
	    if((num[i]!=maxium)&&(num[i]!=minium))
	        cout<<num[i]<<" ";
    return 0;
}
  1. lester大帥哥
題目描述
(傳說級別的題目不一定都是超級難題,也包括具有某些特殊含義題目。比如這道題就是為了紀念這個網站的締造者,傳說中的lester大神)

知道這個網站誰做的嗎,就是史上最帥小鮮肉lester大大!
輸入輸出格式
輸入格式
沒有輸入
輸出格式
輸出lester大帥哥
輸入輸出樣例
輸入樣例#1:
沒有輸入
輸出樣例#1:
lester大帥哥
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"lester大帥哥";
	return 0;
}
  1. 三連擊
題目描述
將1,2,…,9共9個數分成三組,分別組成三個三位數,且使這三個三位數構成1:2:3的比例,試求出所有滿足條件的三個三位數
輸入輸出格式
輸入格式
木有輸入
輸出格式
若干行,每行3個數字。按照每行第一個數字升序排列
輸入輸出樣例
輸入樣例#1:

輸出樣例#1:
192 384 576
* * *
...
* * *
(輸出被和諧了)
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
    cout<<"192 384 576"<<endl;  
	cout<<"219 438 657"<<endl; 
	cout<<"273 546 819"<<endl; 
	cout<<"327 654 981"<<endl;
	return 0;
}
  1. 湊和
題目描述
有n個整數,編號1到n,判斷能否找到兩個不同編號的數總和為m。

如果可以找到,則輸出Yes。若找不到則輸出No。

注意:需要找的是兩個不同編號的數。

輸入輸出格式
輸入格式
輸入的第一行為n和m兩個整數,第二行為n個數字。
其中n<=100,數字絕對值不超過100000。
輸出格式
Yes或者No
輸入輸出樣例
輸入樣例#1:
4 15
1 5 3 10
輸出樣例#1:
Yes
輸入樣例#2:
3 5
1 2 5
輸出樣例#2:
No
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int m,n,num[101],i,j;
bool ans=0; 
int main(){
	cin>>n>>m;
	for(i=0;i<n;i++)cin>>num[i];
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++)
			if(num[i]+num[j]==m){ans=1;break;}
	}
	cout<<(ans?"Yes":"No")<<endl;
	return 0;
}
  1. 病毒擴散(BestAC by燕子何)
題目描述
今天在地圖上已經有幾個地點爆發了疫情,請找到第二天會有哪些地方受到威脅。輸入是5*5的表格,用來表示地圖上的疫情。E表示現在沒有疫情,A表示已經有疫情。第二天,所有已有疫情地點的上下左右位置都會發展出疫情。請輸出5*5的新表格,用來表示第二天的疫情。
輸入輸出格式
輸入格式
5*5的字元陣
輸出格式
5*5的字元陣
輸入輸出樣例
輸入樣例#1:
EEEEE
EEEEE
AEEEE
EEEAE
EEEEE
輸出樣例#1:
EEEEE
AEEEE
AAEAE
AEAAA
EEEAE
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
using namespace std;
char a[7][7];
int main(){
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)
			cin>>a[i][j];
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)
			if(a[i][j]=='A'){
				if(i-1>=1&&a[i-1][j]!='A') a[i-1][j]='a';
				if(i+1<=5&&a[i+1][j]!='A') a[i+1][j]='a';
				if(j-1>=1&&a[i][j-1]!='A') a[i][j-1]='a';
				if(j+1<=5&&a[i][j+1]!='A') a[i][j+1]='a';
			}
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)
			if(a[i][j]=='a')
				a[i][j]='A';
		cout<<endl;
	for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++)
				cout<<a[i][j];
			cout<<endl;
	}
	return 0;
}
  1. 大小寫轉換
題目描述
將字串中的大寫字母轉為小寫,小寫字母轉為大寫
輸入輸出格式
輸入格式
一行字串,只包含字母,無需檢查輸入合法性
輸出格式
一行字串
輸入輸出樣例
輸入樣例#1:
abcdEFG
輸出樣例#1:
ABCDefg
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
char c;
int main(){
	while(cin>>c){
		if(c>='A'&&c<='Z')cout<<char(c+32);
		if(c>='a'&&c<='z')cout<<char(c-32);
	}
	return 0;
}
  1. 三數湊和
題目描述
請寫一個程式,在輸入的n個正整數中,判斷能否找到三個數總和為m,這三個數可以重複(即n個數中的每個數都可以使用多次)。如果可以找到,則輸出為Yes。若找不到則輸出No。輸入的第一行為n和m兩個整數,第二行為n個數字。
其中n<=1000,數字絕對值不超過2000。
輸入輸出格式
輸入格式
第一行為n和m兩個整數,第二行為n個數字。 其中n<=1000,數字絕對值不超過2000。m<=2000。
輸出格式
Yes或者No
輸入輸出樣例
輸入樣例#1:
4 15
1 5 3 9
輸出樣例#1:
Yes
輸入樣例#2:
3 10
5 6 7
輸出樣例#2:
No
輸入樣例#3:
無
輸出樣例#3:
無

#include<bits/stdc++.h>
using namespace std;
int a[1000],b[2001],n,m;
bool cnt=0;
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++)cin>>a[i],b[a[i]]=1; 
	for(int j=0;j<n;j++)
		for(int k=0;k<n;k++){
			if(m-a[j]-a[k]>2000||m-a[j]-a[k]<0) continue;
			if(b[m-a[j]-a[k]]==1){cnt=1;break;} 
		}
	cout<<(cnt?"Yes":"No")<<endl;
	return 0;
}
  1. 一個菱形2
題目描述
請寫一個程式,使用輸出命令在平面上輸出一個菱形,具體形狀請參考下文中的輸出樣例。

注意:

一共7行,每一行都有一個換行,行之間不能有多餘空行;

行末星號後不應該出現多餘空格;

星號之間不應該有空格。

輸入輸出格式
輸入格式
無
輸出格式
無
輸入輸出樣例
輸入樣例#1:
無
輸出樣例#1:
   *
  ***
 *****
*******
 *****
  ***
   *
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
using namespace std;
int main(){
	cout<<"   *"<<endl;
	cout<<"  ***"<<endl;
	cout<<" *****"<<endl;
	cout<<"*******"<<endl;
	cout<<" *****"<<endl;
	cout<<"  ***"<<endl;
	cout<<"   *"<<endl;
	return 0;
}
  1. ASCII碼破密
題目描述
請把以下密碼通過ASCII碼轉換成英文句子,並寫一個程式把該句子完整 地輸出到螢幕
67 43 43 32 114 117 110 115 32 102 97 115 116
輸入輸出格式
輸入格式
無
輸出格式
一行字串
輸入輸出樣例
輸入樣例#1:
無輸入
輸出樣例#1:
保密
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
using namespace std;
int main(){
	cout<<"C++ runs fast";
	return 0;
}
  1. A+B
題目描述
請寫一個程式,輸入是兩個整數a和b,用空格分開,輸出是這兩個數的和。
輸入輸出格式
輸入格式
一行裡有兩個整數,用空格分開
輸出格式
一個整數
輸入輸出樣例
輸入樣例#1:
7 8
輸出樣例#1:
15
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	cout<<a+b<<endl;
	return 0;
}
  1. 長方體體積
題目描述
請寫一個程式,輸入長方體的長,寬,高。輸出這 個長方體的體積(保留2位小數)。
輸入輸出格式
輸入格式
輸入包含三個浮點型數字,用空格分開,輸入的數 字都不會超過10000。
輸出格式
輸出一個浮點數。
輸入輸出樣例
輸入樣例#1:
2.5 5 1
輸出樣例#1:
12.50
輸入樣例#2:
1 2 3
輸出樣例#2:
6.00
輸入樣例#3:
2.5 2 2
輸出樣例#3:
10.00
#include<iostream>
#include<iomanip>
using namespace std;
double a,b,c;
int main(){
	cin>>a>>b>>c;
	cout<<fixed<<setprecision(2)<<a * b * c;
	return 0;
}
  1. 凱撒加密字元
題目描述
歷史上羅馬的凱撒大帝使用過一種加密技術,把英 文的每個字母按照規律變成另一個字母。例如以下 規則:a加密後變成b,b加密後變成c,c加密後變成d,…,y加密後變成z,z加密後變成a 請寫一個程式,輸入是三個小寫字母,輸出是這些字母加密後的 結果。
輸入輸出格式
輸入格式
輸入檔案ceasar.in  輸入共一行,三個小寫字母,用空格分開
輸出格式
輸出檔案ceasar.out  輸出共一行,三個小寫字母 ,用空格分開
輸入輸出樣例
輸入樣例#1:
x y z
輸出樣例#1:
y z a
輸入樣例#2:
a b c
輸出樣例#2:
b c d
輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("ceasar.in", "r", stdin);
	freopen("ceasar.out", "w", stdout);
	char a, b, c;
	cin>>a>>b>>c;
	a = (a - 'a' + 1) % 26 + 'a';
	b = (b - 'a' + 1) % 26 + 'a';
	c = (c - 'a' + 1) % 26 + 'a';
	cout<<a<<" "<<b<<" "<<c<<endl;
	return 0;
}
  1. 打折
題目描述
西佳佳商場進行暑期打折促銷,一支鋼筆單價10元 。如果購買數量滿100支可以打七折;如果購買數量滿50支可以打八折。請寫一個程式,輸入是一個正 整數表示購買數量,輸出總費用。
輸入輸出格式
輸入格式
輸入一個整數,保證不超過100000
輸出格式
輸出一個整數
輸入輸出樣例
輸入樣例#1:
80
輸出樣例#1:
640
解釋說明:買80支筆可以打八折,每支筆單價變成8元,總費用=8元/支*80支=640元
輸入樣例#2:
1
輸出樣例#2:
10
解釋說明:買1支筆不打折,總費用=10元/支*1支=10元
輸入樣例#3:
100
輸出樣例#3:
700
解釋說明:買100支筆可以打七折,每支筆單價7元 ,總費用=7元/支*100支=700元
#include<iostream>
using namespace std; 
int main(){
	int n; 
	cin>>n; 
	if(n<50) 
		cout<<n*10<<endl; 
	else if(n>=50&&n<100)
		cout<<n*10*0.8<<endl;
	else 
		cout<<n*10*0.7<<endl;	
	return 0;
}
  1. 含k個3的數
題目描述
輸入兩個正整數m和k,其中1<m<1000000000,1<=k<=8 ,判斷m能否被19 整除,且恰好含有k個3,如果滿足條件,則輸出YES,否則,輸出NO。
輸入輸出格式
輸入格式
m 和 k 的值,中間用單個空格間隔
輸出格式
滿足條件時輸出 YES,不滿足時輸出 NO
輸入輸出樣例
輸入樣例#1:
43833 3
輸出樣例#1:
YES
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
	int x,y,cnt=0;
	cin>>x>>y;
	int z=x;
	while(z>=1){
		if(z%10==3) cnt++;
		z=z/10;
	} 
	if(cnt==y && x%19==0) cout<<"YES"<<endl;
	else cout<<"NO"<<endl; 
	return 0;
}
  1. 最大值
題目描述
寫一個程式,輸入是三個整數,輸出是這三個數中 的最大值。注意: 三個數中可能出現相等的數字
輸入輸出格式
輸入格式
共一行,三個整數,由空格分開,絕對值均不超過1000000000
輸出格式
一個整數
輸入輸出樣例
輸入樣例#1:
1 1 0
輸出樣例#1:
1
輸入樣例#2:
1 2 3
輸出樣例#2:
3
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
using namespace std; 
int main(){ 
	int a,b,c;
	cin>>a>>b>>c;
	if(a>=b&&a>=c) 
		cout<<a<<endl;
	else if(b>=a&&b>=c)
		cout<<b<<endl;
	else 
		cout<<c<<endl;	
	return 0; 
}
  1. 含k個3的數
題目描述
輸入兩個正整數m和k,其中1<m<1000000000,1<=k<=8 ,判斷m能否被19 整除,且恰好含有k個3,如果滿足條件,則輸出YES,否則,輸出NO。
輸入輸出格式
輸入格式
m 和 k 的值,中間用單個空格間隔。
輸出格式
滿足條件時輸出 YES,不滿足時輸出 NO。
輸入輸出樣例
輸入樣例#1:
43833 3
輸出樣例#1:
YES
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
	int x,y,cnt=0;
	cin>>x>>y;
	int z=x;
	while(z>=1){
		if(z%10==3) cnt++;
		z=z/10;
	} 
	if(cnt==y && x%19==0) cout<<"YES"<<endl;
	else cout<<"NO"<<endl; 
	return 0;
}
  1. 三角形判定
題目描述
數學家告訴我們:三角形中,任意兩條邊之和一定 大於第三邊。請寫一個程式,輸入為三條線段的長 度,輸出Yes或者No代表這三條線段能否組成一個三角形。


提示:
輸入三條邊長a,b,c
如果(a加b大於c 並且 b加c大於a 並且 c加a大於b)就輸出Yes
否則輸出No
輸入輸出格式
輸入格式
輸入共一行,三個整數,代表三條線段的長度,均 不超過100000

輸出格式
一行字串,Yes或者No
輸入輸出樣例
輸入樣例#1:
9 5 4
輸出樣例#1:
No
輸入樣例#2:
4 5 6
輸出樣例#2:
Yes
輸入樣例#3:

輸出樣例#3:

#include<iostream>
using namespace std; 
int main(){
	int a,b,c;
	cin>>a>>b>>c;
	if(a>=b&&a>=c)
		cout<<a<<endl;
	else if(b>=a&&b>=c)
		cout<<b<<endl;
	else
		cout<<c<<endl;
	return 0;
}
  1. 誰考了第k名
題目描述
在一次考試,每個學生的成績均不相同,現在知道學生的學號和成績,求考第k名學生的學號和成績。
輸入輸出格式
輸入格式
第一行兩個整數n, k,分別表示學生人數和要求的第k名學生,1<=n<=100, 1<=k<=n。
其後有n行,每行一個字串和一個浮點數,分別表示學號和成績。
輸出格式
第k名學生的學號和成績
輸入輸出樣例
輸入樣例#1:
2 1
001 90
002 80
輸出樣例#1:
001 90
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
struct stu{string id;double mark;};
stu a[103];
int n,k;
bool cmp(const stu&a,const stu&b){return a.mark>b.mark;}
int main(){
	cin>>n>>k;
	for(int i=1; i<=n; i++)	cin>>a[i].id>>a[i].mark;
	sort(a+1,a+1+n,cmp);
	cout<<a[k].id<<" "<<a[k].mark<<endl;
	return 0; 
}
  1. 菱形變形
題目描述
請寫一個程式,輸入是一個正整數n,輸出一個邊長為n的菱形圖形。
輸入輸出格式
輸入格式
一個正整數n, n<=1000
輸出格式
2n-1行字串。注意行末不能出現多餘空格
輸入輸出樣例
輸入樣例#1:
4
輸出樣例#1:
   *
  ***
 *****
*******
 *****
  ***
   *
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	for (int i=0; i<n; i++){
		for (int j=0; j<(n-1-i); j++)	cout<<" ";
		for (int j=0; j<2*i+1; j++)	cout<<"*" ;
		cout<<endl;
	}
	for (int i=0; i<n-1; i++){
		for (int j=0; j<i+1; j++)	cout<<" ";
		for (int j=0; j<2*(n-1)-(1+2*i); j++)	cout<<"*";
		cout<<endl;
	}
	return 0;
}
  1. FizzBuzz
題目描述
FizzBuzz遊戲需要玩家報數時替換特定數字。請寫 一個程式,輸入是一個正整數n, n<=100. 依次對1至n的整數列印,如該數能被3整除的時候列印Fizz ;能被5整除的時候列印Buzz;如果既能被3又能被5整除的時候列印FizzBuzz;否則列印該數字。兩次 列印間有空格分開。
輸入輸出格式
輸入格式
一個正整數n
輸出格式
一行字串
輸入輸出樣例
輸入樣例#1:
16
輸出樣例#1:
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16
輸入樣例#2:
5
輸出樣例#2:
1 2 Fizz 4 Buzz
輸入樣例#3:
1
輸出樣例#3:
1
#include<iostream>
using namespace std;
int main(){
	int n,i;
	cin>>n;
	for(i=1;i<=n;i++){ 
		if(i % 5 == 0 && i % 3 == 0){
			cout<<"FizzBuzz ";
		}
		else if(i % 5 == 0){
			cout<<"Buzz "; 
		}
		else if(i % 3 == 0){
			cout<<"Fizz ";
		}
		else{
			cout<<i<<" ";
		}
	}
	return 0;
}
  1. 質數生成
題目描述
請寫一個程式,輸入是一個正整數n,輸出1到n內所有質數,用空格分隔 開。
輸入輸出格式
輸入格式
一個正整數n, n<=100000
輸出格式
一行正整數,用空格分隔開
輸入輸出樣例
輸入樣例#1:
20
輸出樣例#1:
2 3 5 7 11 13 17 19
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int x){
	if(x<=1)return 0;
	for(int i=2;i*i<=x;i++) 
		if(x%i==0)return 0;
	return 1;
}
int main(){
	int n;
	cin>>n;
	for(int p=2;p<=n;p++)
		if(isPrime(p))cout<<p<<" ";
	return 0;
} 
  1. 括號匹配
題目描述
假設一個表示式有英文字母(小寫)、運算子(+,—,*,/)和左右小(圓)括號構成。編寫一個程式檢查表示式中的左右圓括號是否匹配,若匹配,則 返回“YES”;否則返回“NO”。
輸入輸出格式
輸入格式
一行字串即表示式
輸出格式
一行,匹配時輸出YES,否則輸出NO
#include<iostream>
#include<string>
using namespace std;
int top=0;
string f;
int main(){
	getline(cin,f);
	bool match=1;
	for(int i=0;i<f.size();i++){
		if(f[i]=='(')
			++top;
		else if(f[i]==')'){
			if (top==0){
				match=0;
				break;
			}
			top--;
		}
	}
	if (top>0)match=0;

	if (match) cout<<"YES"<<endl;
	else cout<<"NO"<<endl;
	return 0;
}
  1. 掃雷遊戲
題目描述
掃雷遊戲是一款十分經典的單機小遊戲。在n行m列 的雷區中有一些格子含有地雷(稱之為地雷格), 其他格子不含地雷(稱之為非地雷格)。玩家翻開 一個非地雷格時,該格將會出現一個數字——提示周 圍格子中有多少個是地雷格。遊戲的目標是在不翻 出任何地雷格的條件下,找出所有的非地雷格。 現在給出n行m列的雷區中的地雷分佈,要求計算出每 個非地雷格周圍的地雷格數。 1≤n≤100, 1≤m≤100 。
輸入輸出格式
輸入格式
輸入檔案第一行是用一個空格隔開的兩個整數n和m ,分別表示雷區的行數和列數。

接下來n行,每行m個字元,描述了雷區中的地雷分 布情況。字元’*’表示相應格子是地雷格,字元’?’ 表示相應格子是非地雷格。相鄰字元之間無分隔符 。

輸出格式
輸出檔案包含n行,每行m個字元,描述整個雷區。 用’*’表示地雷格,用周圍的地雷個數表示非地雷格。相鄰字元之間無分隔符
#include<iostream>
using namespace std;
const int N=109;
int n,m;
char a[N][N],b[N][N];
int dx[8]={1,1,1,0,0,-1,-1,-1};
int dy[8]={1,0,-1,1,-1,1,0,-1};
int count(int x,int y){
	int cnt=0;
	for(int k=0;k<8;k++){
		int nx=x+dx[k],ny=y+dy[k];
		if(nx>=1&&nx<=n&&ny>=1&&ny<=m)
		    cnt+=(a[nx][ny]=='*');
	}
	return cnt;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++)
	        cin>>a[i][j];
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++)
	        if(a[i][j]=='?')
	            b[i][j]='0'+count(i,j);
	        else
	            b[i][j]=a[i][j];
	for(int i=1;i<=n;i++,cout<<endl)
	    for(int j=1;j<=m;j++)cout<<b[i][j];
	return 0;
}