吳凡的題庫——快快程式設計101-150
阿新 • • 發佈:2022-04-12
- 大小寫轉換
題目描述
請使用者鍵入一個字串,將其中的大寫字母變成小寫,小寫字母變成大寫,輸出改變後的字串。
輸入輸出格式
輸入格式
輸入檔案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; }
- 卡特蘭數
題目描述 卡特蘭數,英文名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;
}
- 最小公倍數
題目描述 請寫一個程式,輸入是兩個正整數,輸出是他們的 最小公倍數。 說明:最小公倍數英文叫做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;
}
- 大寫
題目描述
請寫一個程式,輸入是一個字串,請將其中的小 寫字母都改成大寫字母,並輸出。
輸入輸出格式
輸入格式
輸入檔案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;
}
- 凱撒加密字串
題目描述
歷史上羅馬的凱撒大帝使用過一種加密技術,把英 文的每個字母按照規律變成另一個字母。例如以下 規則: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 行,一個整數 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;
}
- 得獎分數線 (前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;
}
- 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;
}
- 殺傷範圍
題目描述
一次元殭屍大戰爆發了,英雄站在一次元世界的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;
}
- 合影效果
題目描述
同學們去野外郊遊,為美麗的景色所陶醉,想合影 留念。如果他們站成一排,男生全部在左(從拍照 者的角度),並按照從矮到高的順序從左到右排, 女生全部在右,並按照從高到矮的順序從左到右排 ,請問他們合影的效果是什麼樣的?輸入第一行是 人數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;
}
- 螺旋矩陣
題目描述
一個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;
}