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

吳凡的題庫——快快程式設計101-150

  1. 大小寫轉換
題目描述
請使用者鍵入一個字串,將其中的大寫字母變成小寫,小寫字母變成大寫,輸出改變後的字串。
輸入輸出格式
輸入格式
輸入檔案letters.in 輸入一行字串。
輸出格式
輸出檔案letters.out 輸出一行字串。
輸入輸出樣例
輸入樣例#1:
Tom studied in MIT.

輸出樣例#1:
tOM STUDIED IN mit.
輸入樣例#2:

輸出樣例#2:

輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("letters.in", "r", stdin);
	freopen("letters.out", "w", stdout);
	string s, ans;
	getline(cin, s);
	for(int i=0;i<s.size();i++){
		if((s[i]<='z')&&(s[i]>='a'))	ans += char(s[i] - 32);
		else if((s[i]<='Z')&&(s[i]>='A'))	ans += char(s[i] + 32);
		else ans += s[i];
	}
	cout<<ans;
	return 0;
} 
  1. 卡特蘭數
題目描述
卡特蘭數,英文名Catalan number,是組合數學中 一個常出現在各種計數問題中出現的數列。以比利 時數學家卡塔蘭 (1814–1894)的名字來命名,其前 幾項為 : 1, 1, 2, 5, 14, 42, 132, … 卡特蘭數 第零項h(0)=1,第一項h(1)=1,之後每項存在規律 。當k>=2時,Catalan數滿足幾種常見的推導方式: 方法1: h(k)= h(0)*h(k-1)+h(1)*h(k-2) + ... + h(k-1)*h(0) 方法2: h(k)=h(k-1)*2*(2*k-1)/(k+1) 請寫一個程式,輸入是一個正整數,輸出是第n項的卡特蘭數。
輸入輸出格式
輸入格式
輸入是一個正整數
輸出格式
輸出是第n項的卡特蘭數。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll h(int k){
	if(k<2)return 1;
	else return h(k-1)*2*(2*k-1)/(k+1);
}
int main(){
	int x;
	cin>>x;
	cout<<h(x)<<endl;
	return 0;
}
  1. 最小公倍數
題目描述
請寫一個程式,輸入是兩個正整數,輸出是他們的 最小公倍數。 說明:最小公倍數英文叫做Least Common Multiple,簡寫LCM。
輸入輸出格式
輸入格式
兩個正整數,均不超過1000000000
輸出格式
一個正整數
輸入輸出樣例
輸入樣例#1:
4 6
輸出樣例#1:
12
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
	long long a, b, r, result, ta, tb;
	cin>>a>>b;
	ta = a;
	tb = b;
	while(r=a%b){
		a = b;
		b = r;
	}
	result = b * (ta / b) * (tb / b);
	cout<<result<<endl;
	return 0;
}
  1. 大寫
題目描述
請寫一個程式,輸入是一個字串,請將其中的小 寫字母都改成大寫字母,並輸出。
輸入輸出格式
輸入格式
輸入檔案capitalization.in  輸入一行包含一個字串,沒有空格,長度不超過10000.
輸出格式
輸出檔案capitalization.out 輸出一個字串
輸入輸出樣例
輸入樣例#1:
Algorithm
輸出樣例#1:
ALGORITHM
輸入樣例#2:

輸出樣例#2:

輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("capitalization.in", "r", stdin);
	freopen("capitalization.out", "w", stdout);
	string s;
	getline(cin, s);
	for(int i = 0; i < s.size(); i++){
		if(s[i] >= 'a' && s[i] <= 'z')
		    s[i] -= 32;
	}
	cout<<s<<endl;
	return 0;
}
  1. 凱撒加密字串
題目描述
歷史上羅馬的凱撒大帝使用過一種加密技術,把英 文的每個字母按照規律變成另一個字母。例如以下 規則:a加密後變成b,b加密後變成c,c加密後變成d,…,y加密後變成z,z加密後變成a 請寫一個程式,輸入是一行字串,只包含小寫字母和空格,輸 出是這些字母加密後的結果。 說明:字串中的空格應不做改動
輸入輸出格式
輸入格式
輸入檔案caesar.in 輸入一行字串,包含小寫字 母或空格。
輸出格式
輸出檔案caesar.out 輸出是其中字母加密後的結果。 說明:字串中的空格應不做改動
輸入輸出樣例
輸入樣例#1:
zhe ti zhen jian dan
輸出樣例#1:
aif uj aifo kjbo ebo
輸入樣例#2:
viva la vida
輸出樣例#2:
wjwb mb wjeb
輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("caesar.in", "r", stdin);
	freopen("caesar.out", "w", stdout);
	string s;
	getline(cin, s);
	for(int i = 0; i < s.size(); i++){
		if(s[i] != ' '){
			if(s[i] == 'z' || s[i] == 'Z'){
				if(s[i] == 'z')
				    s[i] = 'a';
				else
				    s[i] = 'A';
			}
			else
			    s[i]++;
		}
	}
	cout<<s<<endl;
	return 0;
}
  1. 數字反轉
題目描述
給定一個整數,請將該數各個位上數字反轉得到一 個新數。新數也應滿足整數的常見形式,即除非給 定的原數為零,否則反轉後得到的新數的最高位數 字不應為零(參見樣例)。
輸入輸出格式
輸入格式
輸入共1 行,一個整數 N
輸出格式
共1 行,一個整數 N
輸入輸出樣例
輸入樣例#1:
-380
輸出樣例#1:
-83
輸入樣例#2:

輸出樣例#2:

輸入樣例#3:

輸出樣例#3:

#include<iostream>
using namespace std;
typedef long long ll;
int main(){
	ll n,ans=0;
	cin>>n;
	if(n<0){
		cout<<"-";
		n=-n;
	}
	do{
		ans=ans*10+n%10;
		n/=10;
	}while(n);
	cout<<ans;
	return 0;
}
  1. 得獎分數線 (前m名都能獲獎)
題目描述
小盆友們參加程式設計比賽,共n人蔘賽,前m名一定可 以得獎。請寫一個程式,輸入第一行是兩個正整數n和m,輸入第二行是n個參賽者的得分,由空格隔開 。輸出是至少得幾分可以拿獎。如有並列分數時, 並列前m名都能獲獎。
輸入輸出格式
輸入格式
 輸入第一行是兩個正整數n和m,輸入第二行是n個 參賽者的得分(m<=n<=10000)
輸出格式
輸出一個數。
輸入輸出樣例
輸入樣例#1:
4 2
90 90 70 100
輸出樣例#1:
90
輸入樣例#2:

輸出樣例#2:

輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,k,a[500001];
	cin>>n>>k;
	for(int i=0;i<n;i++)	cin>>a[i];
	sort(a, a+n);
	reverse(a, a+n);
	cout<<a[k-1];
	return 0;
}
  1. ISBN號碼
題目描述
每一本正式出版的圖書都有一個ISBN號碼與之對應 ,ISBN碼包括9位數字、1位識別碼和3位分隔符,其規定格式如“x-xxx-xxxxx-x”,其中符號“-”是分隔 符(鍵盤上的減號),最後一位是識別碼,例如0-670-82162-4就是一個標準的ISBN碼。ISBN碼的首位 數字表示書籍的出版語言,例如0代表英語;第一個分隔符“-”之後的三位數字代表出版社,例如670代 表維京出版社;第二個分隔之後的五位數字代表該 書在出版社的編號;最後一位為識別碼。識別碼的 計算方法如下: 首位數字乘以1加上次位數字乘以2……以此類推,用所得的結果mod 11,所得的餘數即 為識別碼,如果餘數為10,則識別碼為大寫字母X。例如ISBN號碼0-670-82162-4中的識別碼4是這樣得 到的:對067082162這9個數字,從左至右,分別乘 以1,2,…,9,再求和,即0×1+6×2+„„+2×9=158, 然後取158 mod 11的結果4作為識別碼。 你的任務 是編寫程式判斷輸入的ISBN號碼中識別碼是否正確 ,如果正確,則僅輸出“Right”;如果錯誤,則輸出你認為是正確的ISBN號碼。
輸入輸出格式
輸入格式
輸入檔案isbn.in 輸入只有一行,是一個字元序列 ,表示一本書的ISBN號碼(保證輸入符合ISBN號碼 的格式要求)。
輸出格式
輸出檔案isbn.out 輸出共一行,假如輸入的ISBN號碼的識別碼正確,那麼輸出“Right”,否則,按照規定的格式,輸出正確的ISBN號碼(包括分隔符“-”)。
輸入輸出樣例
輸入樣例#1:
0-670-82162-0
輸出樣例#1:
0-670-82162-4
輸入樣例#2:

輸出樣例#2:

輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("isbn.in", "r", stdin);
	freopen("isbn.out", "w", stdout);
	string s;
	cin>>s;
	int c=1,sum=0;
	for(int i=0;i<s.size()-2;i++)
	    if(i!=1&&i!=5){
	    	sum+=c*(s[i]-'0');
	    	c++;
		}
	int id=sum%11;
	char code='X';
	if(id<10)
	    code='0'+id;
	if(s[12]==code)
	    cout<<"Right";
	else
	    cout<<s.substr(0,12)<<code<<endl;
	return 0;
} 
  1. 殺傷範圍
題目描述
一次元殭屍大戰爆發了,英雄站在一次元世界的0點,n只殭屍從英雄的前後向他襲來。英雄的魔法殺傷範圍為r,當殭屍離英雄的距離小於等於r時該殭屍 會被消滅。為了消滅至少k只殭屍,請問英雄魔法需要多大?
輸入輸出格式
輸入格式
輸入檔案range.in 輸入第一行為n和k,1<=k<=n<=10000。第二行為n個整數,代表這n只殭屍的位置, 均在-100000到100000之間。
輸出格式
輸出檔案range.out 輸出為一個正整數,代表殺傷 範圍r。
輸入輸出樣例
輸入樣例#1:
8 3
1 2 3 4 -1 -2 2 2
輸出樣例#1:
2
輸入樣例#2:

輸出樣例#2:

輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("range.in", "r", stdin);
	freopen("range.out", "w", stdout);
	int n,k,a[100001],c=0,g=0;
	cin>>n>>k;
	for(int i = 0; i < n; i ++)		cin>>a[i];
	sort(a, a+n);
	while(g<k){
		g=0;
		c++;
		for(int i=0;i<n;i++)
		    if(abs(a[i])<=c)
		        g++;
	}
	cout<<c;
	return 0;
}
  1. 合影效果
題目描述
同學們去野外郊遊,為美麗的景色所陶醉,想合影 留念。如果他們站成一排,男生全部在左(從拍照 者的角度),並按照從矮到高的順序從左到右排, 女生全部在右,並按照從高到矮的順序從左到右排 ,請問他們合影的效果是什麼樣的?輸入第一行是 人數n,之後有n行每行是一位朋友的描述,包括性 別和身高。輸出是一行表示合影的身高排列,由空 格隔開。
輸入輸出格式
輸入格式
輸入檔案photo.in 輸入第一行是人數n,n<=100。 之後有n行每行是一位朋友的描述,包括性別和身高。
輸出格式
輸出檔案photo.out 輸出是一行表示合影的身高排 列,由空格隔開。說明:輸入輸出的身高都保留兩 位小數
輸入輸出樣例
輸入樣例#1:
6
male 1.72
male 1.78
female 1.61
male 1.65
female 1.70
female 1.56
輸出樣例#1:
1.65 1.72 1.78 1.70 1.61 1.56
輸入樣例#2:

輸出樣例#2:

輸入樣例#3:

輸出樣例#3:

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 400005;
string s;
double h[MAXN];
int type[MAXN],rank[MAXN],n;
bool cmp(int a,int b){
	if(type[a] != type[b])	return type[a] < type[b];
	if(!type[a]) return h[a] < h[b];
	return h[a] > h[b];
}
int main(){
	freopen("photo.in", "r", stdin);
	freopen("photo.out", "w", stdout);
	cin>>n;
	for(int i = 0;i < n;i ++){
		cin>>s>>h[i];
		if(s[0] == 'f')	type[i] = 1; else type[i] = 0;
		rank[i] = i;
	}
	sort(rank,rank+n,cmp);
	for(int i = 0;i < n;i ++)
	    printf("%.2f%c",h[rank[i]],(i+1)==n?'\n':' ');
	return 0;
}
  1. 螺旋矩陣
題目描述
一個n*n矩陣從左上角開始順時針填數(如圖n為4),求第i行j列所填的數字
  1  2  3  4
12 13 14  5
11 16 15  6
10  9  8  7
輸入輸出格式
輸入格式
輸入檔案matrix.in 包含n,i,j(i,j<=n<=100000)
輸出格式
輸出檔案matrix.out 包含第i行j列所填的數字
輸入輸出樣例
輸入樣例#1:
4 2 3
輸出樣例#1:
14
輸入樣例#2:
3 2 2
輸出樣例#2:
9
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("matrix.in","r",stdin);
	freopen("matrix.out","w",stdout);
    ios::sync_with_stdio(false);
    long long n,i,j,mi,ans=0;
    cin>>n>>i>>j;
    mi=min(i,min(j,min(n-i+1,n-j+1)));
    if(i<=j)ans=mi*(4*(n-1)-4*mi)+10*mi-4*n-3+i+j;
    else ans=mi*(4*n-4*mi)+2*mi+1-i-j;
    cout<<ans<<endl;
    return 0;
}