算法競賽入門【碼蹄集新手村600題】(MT1101-1150)
(文章目錄)
前言
為什麼突然想學算法了?
> 用較為“官方”的語言講,是因為算法對計算機科學的所有分支都非常重要。 在絕大多數的計算機科學分支領域中,要想完成任何實質性的工作,了解算法的基礎知識并掌握與算法密切相關的資料結構知識是必不可少的。
> 但從實際而言,是因為當下快到了考研和找工作的年紀(ಥ_ಥ),無論走哪一條路,都不免需要一些相對豐富的算法知識,是故,便産生了一個暑假速成算法的計劃,可能對于像我這種算法競賽小白而言,幾乎很難,但我仍然還是想嘗試一下,畢竟,夢想還是要有的,萬一實作了呢?~( ̄▽ ̄~)~
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5SO3MDOxQTM0ATN1IDZ1gDMzYzX3UTM0MTM2IzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
為什麼選擇碼蹄集作為刷題軟體?
碼蹄集,是在全國高等學校計算機教學與産業實踐資源建設專家委員會(TIPCC) 指導下建設的,其依托全國各大名校計算機系和清華大學出版社等機關的強大資源,旨在為計算機學習愛好者提供全面和權威的計算機習題。![]()
算法競賽入門【碼蹄集新手村600題】(MT1101-1150)算法競賽入門【碼蹄集新手村600題】(MT1101-1150)前言目錄
目錄
1. MT1101 帶參數的宏II
(1)題目描述
請編寫一個簡單程式,把f(x)=x*(x-1)定義成帶參數的宏,從鍵盤輸入a,b,将a+b的和作為宏實參計算并輸出結果。
格式
輸入格式: 輸入整型,空格分隔。
.
輸出格式: 輸出為實型
樣例1
輸入格式: 3 5
.
輸出格式: 56.000000
(2)參考代碼
#include<bits/stdc++.h>
#define f(x) x*(x-1)
using namespace std;
int main( )
{
int a,b,ans;
scanf("%d %d",&a,&b);
ans=a+b;
printf("%lf",(double)f(ans));
return 0;
}
2. MT1102 長方體
(1)題目描述
将長方體體積計算公式定義為宏。在主函數中輸入長方體長、寬、高求體積。不考慮不合理的輸入或是溢出等特殊情況。
格式
輸入格式: 輸入為實型(正數),空格分隔。
.
輸出格式: 輸出為實型
樣例1
輸入格式: 3 4 5
.
輸出格式: 60.000000
(2)參考代碼
#include<bits/stdc++.h>
#define f(x,y,z) x*y*z
using namespace std;
int main( )
{
double x,y,z;
scanf("%lf %lf %lf",&x,&y,&z);
printf("%lf",f(x,y,z));
return 0;
}
3. MT1103 球體積
(1)題目描述
将球體積計算公式定義為宏。在主函數中輸入半徑求體積。
格式
輸入格式: 輸入為實型
.
輸出格式: 輸出為實型
樣例1
輸入格式:3.5
.
輸出格式: 179.594228
(2)參考代碼
#include<bits/stdc++.h>
#define f(x) 3.14159*4/3*x*x*x
using namespace std;
int main( )
{
double x;
cin>>x;
printf("%lf",f(x));
return 0;
}
4. MT1104 三角形
(1)題目描述
格式
輸入格式: 輸入為實型
.
輸出格式: 輸出為實型
樣例1
輸入格式: 3 4 5
.
輸出格式: 6.000000
(2)參考代碼
#include<bits/stdc++.h>
#define f(a,b,c,p) sqrt(p*(p-a)*(p-b)*(p-c))
using namespace std;
int main( )
{
double a,b,c,p;
cin >> a >> b >>c;
p=0.5*(a+b+c);
if(a+b<=c || a+c<=b || b+c<=a) printf("-1");
else printf("%lf",f(a,b,c,p));
return 0;
}
5. MT1105 英寸英尺英裡
(1)題目描述
定義關于長度的宏,英寸/厘米、英尺/米、英裡/公裡,計算英制與公制機關轉換,在主函數中輸入資料輸出計算結果。假定1英寸=2.54厘米、1英尺=0.31米、1英裡=1.61公裡。
格式
輸入格式: 輸入英寸、英尺、英裡為實型,空格分隔。
.
輸出格式:輸出厘米、米、公裡為實型,空格分隔。保留2位小數。
樣例1
輸入格式: 1 1 1
.
輸出格式: 2.54 0.31 1.61
(2)參考代碼
#include<bits/stdc++.h>
#define f(x) x*2.54
#define g(x) x*0.31
#define z(x) x*1.61
using namespace std;
int main( )
{
double x,y,z;
cin >> x >> y >> z;
printf("%.2lf %.2lf %.2lf",f(x),g(y),z(z));
return 0;
}
6. MT1106 盎司磅
(1)題目描述
定義關于重量的宏,盎司/克、磅/公斤,計算美制機關與公制轉換,在主函數中輸入資料輸出計算結果。
格式
輸入格式:輸入盎司、磅為實型,空格分隔
.
輸出格式:輸出克、公斤實型,空格分隔。保留2位小數。
樣例1
輸入格式:1 1
.
輸出格式: 28.35 0.45
(2)參考代碼
#include<bits/stdc++.h>
#define f(x) x*28.35
#define g(x) x*0.45
using namespace std;
int main( )
{
double x,y;
cin >> x >> y;
printf("%.2lf %.2lf",f(x),g(y));
return 0;
}
7. MT1107 加侖/升
(1)題目描述
定義關于容量的宏,加侖/升,計算機關轉換,在主函數中輸入資料輸出計算結果。
格式
輸入格式: 輸入加侖為實型。
.
輸出格式: 輸出升為實型,保留2位小數。
樣例1
輸入格式: 1
.
輸出格式: 3.79
(2)參考代碼
#include<bits/stdc++.h>
#define f(x) x*3.79
using namespace std;
int main( )
{
double x;
cin >> x;
printf("%.2lf",f(x));
return 0;
}
8. MT1108 保留小數
(1)題目描述
将一個浮點型K數保留n(1≤n≤5)位小數(四舍五入)的算法定義為宏。在主函數中輸入資料輸出計算結果。
格式
輸入格式: 輸入k為實型,n為整數,空格分隔。
.
輸出格式: 輸出為實型
樣例1
輸入格式: 3.1415926 3
.
輸出格式: 3.142
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double k;
int n;
cin >> k >> n;
cout << fixed << setprecision(n) << k << endl;
return 0;
}
9. MT1109 和10相比
(1)題目描述
請編寫一個簡單程式,輸入一個整數,和10比較,輸出比較結果
格式
輸入格式: 輸入整型
.
輸出格式: 輸出...大于或者等于或者小于10
樣例1
輸入格式: 1
.
輸出格式: 1小于10
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x;
cin >> x;
if(x<10) cout << x <<"小于" <<10;
else if(x==10) cout << x <<"等于" <<10;
else cout << x <<"大于" <<10;
return 0;
}
10. MT1110 最小值
(1)題目描述
輸入a,b兩個整數,輸出他們之間的最小值
格式
輸入格式: 輸入2個整數用空格分隔
.
輸出格式:輸出為整型
樣例1
輸入格式:2 8
.
輸出格式: 2
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b;
cin >> a >> b;
if(a<b) cout << a;
else cout << b;
return 0;
}
11. MT1111 最大值
(1)題目描述
輸入a,b兩個整數,輸出他們之間的最大值
格式
輸入格式: 輸入2個整數用空格分隔
.
輸出格式: 輸出為整型
樣例1
輸入格式: 2 8
.
輸出格式: 8
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b;
cin >> a >> b;
if(a>b) cout << a;
else cout <<b;
return 0;
}
12. MT1112 中庸之道
(1)題目描述
請編寫一個簡單程式,輸入3個整數,比較他們的大小,輸出中間的那個數
格式
輸入格式: 輸入整型,空格分隔
.
輸出格式: 輸出整型
樣例1
輸入格式: 1 5 3
.
輸出格式: 3
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int dp[1000],a,b,c;
for(int i=1;i<=3;i++) cin >> dp[i];
sort(dp+1,dp+1+3);
cout << dp[2] <<endl;
return 0;
}
13. MT1113 三人同行
(1)題目描述
三人同行,輸入他們的年齡,輸出最年長者的年齡
格式
輸入格式: 輸入整型,空格分隔
.
輸出格式: 輸出整型
樣例1
輸入格式: 1 66 70
.
輸出格式: 70
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int dp[1000],a,b,c;
for(int i=1;i<=3;i++) cin >> dp[i];
sort(dp+1,dp+1+3);
cout << dp[3] <<endl;
return 0;
}
小結(一)
經典範例:
- 進制轉換:MT1106、MT1107
- 四舍五入:MT1108
14. MT1114 偶數還是奇數
(1)題目描述
請編寫一個簡單程式,檢查一個正整數是偶數還是奇數,如果是偶數輸出Y,否則輸出N。(不考慮0)
格式
輸入格式: 輸入整型
.
輸出格式: 輸出Y或者N
樣例1
輸入格式: 4
.
輸出格式: Y
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a;
cin >> a;
if(a%2==0) cout << "Y";
else cout << "N";
return 0;
}
15. MT1115 小于m的偶數
(1)題目描述
判斷n是否為小于m的偶數,不考慮0,負數或者其他特殊情況。
格式
輸入格式: 輸入為整型n、m,空格分隔
.
輸出格式: 是則輸出YES否則輸出NO
樣例1
輸入格式: 3 6
.
輸出格式: NO
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,m;
cin >> n >> m;
if(n<m&&n%2==0) cout << "YES";
else cout << "NO";
return 0;
}
16. MT1116 正整數
(1)題目描述
判斷n是否為兩位數的正整數
格式
輸入格式: 輸入為整型n
.
輸出格式: 是則輸出YES否則輸出NO
樣例1
輸入格式: 11
.
輸出格式: YES
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
if(n>9&&n<100) cout<<"YES";
else cout<<"NO";
return 0;
}
17. MT1117 兩個負數
(1)題目描述
判斷x、y、z中是否有兩個負數。
格式
輸入格式: 輸入為整型x、y、z,空格分隔
.
輸出格式: 是則輸出YES否則輸出NO
樣例1
輸入格式: 1 2 3
.
輸出格式: NO
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x,y,z,num=0;
cin >> x >> y >>z;
if(x<0) ++num;
if(y<0) ++num;
if(z<0) ++num;
if(num==2) cout<<"YES";
else cout<<"NO";
return 0;
}
18. MT1118 等差數列
(1)題目描述
判斷a、b、c是否為一個等差數列中的連續三項。
格式
輸入格式: 輸入為整型a、b、c,空格分隔
.
輸出格式: 是則輸出YES否則輸出NO
樣例1
輸入格式: 1 2 3
.
輸出格式: YES
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b,c;
cin >> a >> b >> c;
if(b-a==c-b) cout<<"YES";
else cout<<"NO";
return 0;
}
19. MT1119 大小寫的轉換
(1)題目描述
請編寫一個簡單程式,實作輸入字元大小寫的轉換。其他非法輸入(非字母的輸入)則原樣輸出。
格式
輸入格式: 輸入字元型
.
輸出格式: 輸出字元型
樣例1
輸入格式: A
.
輸出格式: a
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char ch;
cin >> ch;
if(ch >= 'A' && ch<='Z') ch+=32;
else if(ch >= 'a' && ch<='z') ch-=32;
else ch=ch;
cout << ch <<endl;
return 0;
}
20. MT1120 老師的評語
(1)題目描述
請編寫一個簡單程式,輸入學生成績等級ABCD,輸出相應的評語“Excellent” 、 “Well done" 、 “You passed"、“Better luck next time"。非法輸入時候則輸出“Invalid grade"
格式
輸入格式: 輸入字元型
.
輸出格式: 輸入字元評語
樣例1
輸入格式: A
.
輸出格式: Excellent
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char ch;
cin >> ch;
if(ch=='A') cout<<"Excellent";
else if(ch=='B') cout<<"Well done";
else if(ch=='C') cout<<"You passed";
else if(ch=='D') cout<<"Better luck next time";
else cout<<"Invalid grade";
return 0;
}
21. MT1121 小碼哥考完咯
(1)題目描述
小碼哥考完咯,你是她的老師,請使用switch語句編寫一個程式,輸出她的分數對應的成績等級ABCDF。使用以下分級标準:A=90-100,B=80-89,C=70-79,D=60-69,F=O-59。不考慮負數或者其他特殊情況。本題要求使用switch語句。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為整型
樣例1
輸入格式: 99
.
輸出格式: A
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
n/=10;
switch(n){
case 10: cout<<'A'<<endl; break;
case 9: cout<<'A'<<endl; break;
case 8: cout<<'B'<<endl; break;
case 7: cout<<'C'<<endl; break;
case 6: cout<<'D'<<endl; break;
default: cout<<'F'<<endl;
}
return 0;
}
小結(二)
經典例題
- 冒泡排序:MT1112
- 正整數(MT1116)的第二種解法:
算法競賽入門【碼蹄集新手村600題】(MT1101-1150)算法競賽入門【碼蹄集新手村600題】(MT1101-1150)前言目錄 - 大小寫轉換:MT1119
22. MT1122 階梯IF-ELSE
(1)題目描述
小碼哥考完咯,你是她的老師,請編寫一個程式,輸出她的分數對應的成績等級ABCDF。使用以下分級标準:A=90-100,B=80-89,C=70-79,D=60-69,F=0-59不考慮負數或者其他特殊情況。本題要求使用階梯IF-ELSE語句,不得使用switch。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為整型
樣例1
輸入格式: 100
.
輸出格式: A
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
n/=10;
switch(n){
case 10: cout<<'A'<<endl; break;
case 9: cout<<'A'<<endl; break;
case 8: cout<<'B'<<endl; break;
case 7: cout<<'C'<<endl; break;
case 6: cout<<'D'<<endl; break;
default: cout<<'F'<<endl;
}
return 0;
}
23. MT1123 元音
(1)題目描述
請編寫一個簡單程式,檢查輸入字元是否為元音
格式
輸入格式: 輸入字元型
.
輸出格式: 輸出Y或N
樣例1
輸入格式: A
.
輸出格式: Y
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char ch;
cin >> ch;
vector<char> a{'A','a','O','o','E','e','I','i','U','u'};
vector<char>::iterator iter = find(a.begin(),a.end(),ch);
if(iter == a.end()) cout<<'N';
else cout<<'Y';
return 0;
}
24. MT1124 羅馬數字
(1)題目描述
編一個程式,輸入一個整數(1~9),輸出對應大寫羅馬數字。不考慮非法的不合理的輸入等特殊情況。
格式
輸入格式: 輸入整型
.
輸出格式: 輸出字元串
樣例1
輸入格式: 4
.
輸出格式: IV
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
string c[100] = {"0","I","II","III","IV","V","VI","VII","VIII","IX","X"};
cout << c[n] << endl;
return 0;
}
25. MT1125 幾月份
(1)題目描述
編一個程式,輸入該月的英文月名,小寫,輸出對應月份号。不考慮非法的不合理的輸入等特殊情況。
格式
輸入格式: 輸入字元串
輸出格式: 輸出整型
樣例1
輸入格式: april
.
輸出格式: 4
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
string s;
cin >> s;
if(s=="january") cout<<1;
else if(s=="february") cout<<2;
else if(s=="march") cout<<3;
else if(s=="april") cout<<4;
else if(s=="may") cout<<5;
else if(s=="june") cout<<6;
else if(s=="july") cout<<7;
else if(s=="august") cout<<8;
else if(s=="september") cout<<9;
else if(s=="october") cout<<10;
else if(s=="november") cout<<11;
else if(s=="december") cout<<12;
return 0;
}
26. MT1126 十二生肖
(1)題目描述
編一個程式,輸入一個整數(1~12),輸出對應十二生肖,鼠、牛、虎、兔、龍、蛇、馬、羊、猴、雞、狗、豬的拼音(小寫)。不考慮非法的不合理的輸入等特殊情況。
格式
輸入格式: 輸入整型
.
輸出格式: 輸出字元串
樣例1
輸入格式: 4
.
輸出格式: tu
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
string c[100] = {"shu","niu","hu","tu","long","she","ma","yang","hou","ji","gou","zhu"};
cout << c[n-1] << endl;
return 0;
}
27. MT1127 小碼哥的屬相
(1)題目描述
輸入小碼哥的生日年份(1900~2050),計算輸出小碼哥的屬相生肖(“rat”,"ox” , “tiger" , "rabbit”, “dragon”, “snake”, “horse” , "sheep”,"monkey", "rooster" , "dog", "pig")。不考慮非法輸入等特殊情況。
格式
輸入格式: 輸入整型
.
輸出格式: 輸出字元串
樣例1
輸入格式: 1900
.
輸出格式: rat
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
n=n-1900;
n%=12;
string c[100] = {"rat","ox","tiger","rabbit","dragon","snake","horse","sheep","monkey","rooster","dog","pig"};
cout << c[n] << endl;
return 0;
}
28. MT1128 骰子的反面
(1)題目描述
小碼哥抛出一個六面骰子。每個面上都印有一個數字,數字在1到6之間。輸入正面的數字,輸出對面的數字。其他情況輸出-1。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為整型
樣例1
輸入格式: 6
.
輸出格式: 1
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x;
cin >> x;
switch(x){
case 1: cout<<'6';break;
case 6: cout<<'1';break;
case 2: cout<<'5';break;
case 5: cout<<'2';break;
case 3: cout<<'4';break;
case 4: cout<<'3';break;
default: cout<<"-1";break;
}
return 0;
}
29. MT1129 小碼哥玩骰子
(1)題目描述
小碼哥抛出一個六面骰子。每個面上都印有一個數字,數字在1到6之間。輸入正面的數字,請猜測對面的數字并輸出兩數之和。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為整型
樣例1
輸入格式: 5
.
輸出格式: 7
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x;
cin >> x;
switch(x){
case 1: cout<<'7';break;
case 6: cout<<'7';break;
case 2: cout<<'7';break;
case 5: cout<<'7';break;
case 3: cout<<'7';break;
case 4: cout<<'7';break;
default: cout<<"-1";break;
}
return 0;
}
30. MT1130 骰子裡的數學
(1)題目描述
小碼哥抛出一個六面骰子。每個面上都印有一個數字,數字在1到6之間。輸入正面的數字,請猜測對面的數字并輸出兩數之差。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為整型
樣例1
輸入格式: 5
.
輸出格式: 3
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x;
cin >> x;
switch(x){
case 1: cout<<"-5";break;
case 6: cout<<'5';break;
case 2: cout<<"-3";break;
case 5: cout<<'3';break;
case 3: cout<<"-1";break;
case 4: cout<<"1";break;
default: cout<<"-1";break;
}
return 0;
}
31. MT1131 字元判斷
(1)題目描述
輸入一個字元,判斷是數字字元、大寫字母、小寫字母、算術運算符、關系運算符、邏輯運算符,還是其他字元,分别輸出“Number”, "Capital letter”,"Lowercase letter" , “Arithmetic operators”, “Relational operators”,"Logical operators”, "Other character"。
格式
輸入格式: 輸入一個字元
.
輸出格式: 輸出字元
樣例1
輸入格式: A
.
輸出格式: Capital letter
備注
算術運算符:+ - * /
關系運算符:= > <
邏輯運算符: ! & | ^
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char ch;
int a;
cin >> ch;
a=(int)ch;
if(a >=48 &&a <= 57) cout << "Number" <<endl;
else if(ch >= 'A' && ch <='Z') cout << "Capital letter" <<endl;
else if(ch >= 'a' && ch <='z') cout << "Lowercase letter" <<endl;
else if(ch == '+' || ch =='-' || ch == '*' || ch =='/') cout << "Arithmetic operators" <<endl;
else if(ch == '=' || ch =='>' || ch =='<') cout << "Relational operators" <<endl;
else if(ch == '!' || ch =='&' || ch == '^' || ch =='|') cout << "Logical operators" <<endl;
else cout << "Other character" <<endl;
return 0;
}
32. MT1132 人民币大寫數字
(1)題目描述
輸入一個金額,輸出對應的人民币大寫數字(零壹貳參肆伍陸染挪玫拾)。不考慮負數等不合理的輸入。
格式
輸入格式: 輸入為整型(<100)
.
輸出格式: 輸出字元
樣例1
輸入格式: 35
.
輸出格式: 叁拾伍元整
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,m,t;
string c[100] = {"零","壹","貳","叁","肆","伍","陸","柒","捌","玖","拾"};
cin >> n;
if(n/10!=0) cout << c[n/10] << c[10];
m = n/10,t=n%10;
if(t!=0) cout << c[t];
if(n==0) cout << c[0];
cout << "元整"<<endl;
return 0;
}
33. MT1133 小碼哥打車
(1)題目描述
小碼哥在緬因州打車,那裡隻有Yellow cab,5個邁(Mile)以内收費10美元,裡程大于5個邁小于等于10個邁的部分每個邁收費2美元,裡程大于10個邁的部分每個邁收費2.5美元。不考慮負數,O或者其他特殊情況。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為實型,保留2位小數
樣例1
輸入格式: 5
.
輸出格式: 10.00
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
double res;
cin >> n;
if(n <= 5) res = 10.00;
else if(n>5 && n<=10) res = 10.0+2*(n-5);
else if(n>10) res = 20+2.5*(n-10);
printf("%.2lf",res);
return 0;
}
34. MT1134 簡單計算
(1)題目描述
編寫一個模拟簡單電腦的程式,計算表達式: a op b的值,要求a、op、b從盤輸入。其中a、b (作除數時不能為O)為數值,op為運算符+、 -、*、/。本題不考慮非法輸入等特殊情況。
格式
輸入格式: 輸入資料和運算符
.
輸出格式: 輸出為實型
樣例1
輸入格式: 3+5
.
輸出格式: 8.000000
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double n,m,res;
char ch;
cin >> n >> ch >> m;
switch(ch){
case '+': res = n+m; break;
case '-': res = n-m; break;
case '*': res = n*m; break;
case '/': res = n/m; break;
}
printf("%.6lf",res);
return 0;
}
35. MT1135 時間轉換
(1)題目描述
編寫一個程式,輸入24小時制的時間,然後以12小時的形式顯示時間。不考慮負數或者其他特殊情況。注意不要把中午12:00顯示為00:00,應該是12:0OPM。淩晨00:00則是12:00AM。
格式
輸入格式: 輸入為整型,冒号分隔
.
輸出格式: 輸出為整型,冒号分隔,以兩位數的形式顯示時間并加上字尾AM或者PM。
樣例1
輸入格式: 8:7
.
輸出格式: 08:07AM
(2)參考代碼
import java.util.Scanner;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
// code here
String t = s.nextLine();
SimpleDateFormat f = new SimpleDateFormat("HH:mm");
Date d = null;
try{
d=f.parse(t);
} catch(ParseException e){
e.printStackTrace();
}
boolean pm = false;
if(d.getHours() == 0){
d.setHours(d.getHours()+12);
}else if(d.getHours()==12){
pm = true;
}else if(d.getHours()>12){
d.setHours(d.getHours()-12);
pm = true;
}
System.out.printf("%02d:%02d",d.getHours(),d.getMinutes());
if(pm==true){
System.out.println("PM");
}else{
System.out.println("AM");
}
s.close();
}
}
36. MT1136 時間也能加
(1)題目描述
分兩行輸入兩組時分秒,空格分隔,編寫一個函數,把對應的時和時相加,分和分相加,秒和秒相加,輸出結果。結果也是時分秒,要滿足時間規律,比如秒的範圍是0~59。不考慮不合理的輸入等特殊情況。
格式
輸入格式: 分兩行輸入兩組時分秒,空格分隔,整型。
.
輸出格式: 輸出整型,空格分隔。
樣例1
輸入格式:
1 2 3
4 5 6
.
輸出格式: 5 7 9
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b,c;
cin >> a >> b >> c;
int ans = a*60*60+b*60+c;
cin >> a >> b >> c;
ans += a*60*60+b*60+c;
cout << ans/60/60 << " "<< ans/60%60 << " "<< ans%60;
return 0;
}
37. MT1137 閏年
(1)題目描述
請編寫一個簡單程式,判斷輸入的年份是不是閏年。輸入公元後的年份。
格式
輸入格式: 輸入整型
.
輸出格式: 輸出Y或者N
樣例1
輸入格式: 2021
.
輸出格式: N
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int y;
cin >> y;
if((y%4==0) && (y%100!=0) || (y%400==0)) cout<<"Y";
else cout<<"N";
return 0;
}
38. MT1138 第幾天
(1)題目描述
輸入日期(YYYY-M-D),然後輸出它是一年中的第幾天。不考慮負數或者其他特殊情況。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為整型
樣例1
輸入格式: 2013-6-17
.
輸出格式: 168
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int dp[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int m,y,d,ans;
scanf("%d-%d-%d",&y,&m,&d);
if((y%100 != 0 && y%4==0) || y%400 ==0) dp[2]++;
for(int i=1;i<m;i++) ans += dp[i];
ans += d;
printf("%d",ans);
return 0;
}
39. MT1139 11或13
(1)題目描述
輸入正整數N,判斷它是否可被11或13整除,輸出YES或者NO。
格式
輸入格式: 輸入正整數N
.
輸出格式: 輸出YES或者NO
樣例1
輸入格式: 13
.
輸出格式: YES
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int N;
cin >> N;
if(N%11==0 || N%13==0) cout << "YES";
else cout << "NO";
return 0;
}
40. MT1140 數字7
(1)題目描述
輸入一個整數N,判斷它是不是整數7的和、差之類的。(比如某數等于7+7,或者7-7,或者7-7-7+7+7...)是則輸出YES否則或者NO。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為YES或者NO
樣例1
輸入格式: 14
.
輸出格式: YES
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
if(n%7==0) cout << "YES";
else cout << "NO";
return 0;
}
小結(三)
典型範例:
-
比較新穎的方法:
容器方法:MT1123
String方法:MT1124
- 運算符:MT1134
- 時間算法:MT1136
- 閏年:MT1138
- 分位數:MT1143
- 整除:MT1145
41. MT1141 數字13
(1)題目描述
給您一個整數輸入N,如果它是整數13的和或差(13+13,13-13,13-13-13+13+13...),輸出YES,否則輸出NO。
格式
輸入格式: 輸入為整型
.
輸出格式: 輸出為YES或者NO
樣例1
輸入格式: 14
.
輸出格式: NO
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin >> n;
if(n%13==0) cout << "YES";
else cout << "NO";
return 0;
}
42. MT1142 整除的總數
(1)題目描述
輸入正整數N和M,其中N<=M。求區間[N,M]中可被K整除的總數。
格式
輸入格式: 輸入正整數N,M和K,空格分隔。
.
輸出格式: 輸出整型
樣例1
輸入格式: 6 15 3
.
輸出格式: 4
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,m,k,num;
cin >> n >> m >> k;
for(int i=n; i<=m; i++){
if(i%k==0) ++num;
}
cout << num;
return 0;
}
43. MT1143 哈沙德數
(1)題目描述
如果一個數字可被其數字之和整除,則稱該數字為Harshad哈沙德數,輸入一個正整數,判斷他是不是哈沙德數,輸出YES或者NO。
格式
輸入格式: 輸入整型
.
輸出格式: 輸出YES或者NO
樣例1
輸入格式: 156
.
輸出格式: YES
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,sum=0;
cin >> n;
for(int i=n;i>0;i/=10) sum+=i%10;
if(n%sum==0) cout<<"YES";
else cout<<"NO";
return 0;
}
44. MT1144 整除
(1)題目描述
輸入正整數N,檢查它是否可以被其數字之和整除,輸出YES或者NO。不考慮不合理的輸入等特殊情況。
格式
輸入格式: 輸入正整數N
.
輸出格式: 輸出YES或者NO
樣例1
輸入格式: 18
.
輸出格式: YES
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,sum=0;
cin >> n;
for(int i=n;i>0;i/=10) sum+=i%10;
if(n%sum==0) cout<<"YES";
else cout<<"NO";
return 0;
}
45. MT1145 全部整除
(1)題目描述
輸入正整數N,找到一個最小的整數K,可以被1到N的每個數整除。
格式
輸入格式: 輸入整型
.
輸出格式: 輸出整型
樣例1
輸入格式:6
.
輸出格式: 60
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,i,j,sum;
cin >> n;
for(i=1;;i++){
sum=0;
for(j=1;j<=n;j++){
if(i%j==0) sum++;
}
if(sum==n) break;
}
cout << i;
return 0;
}
46. MT1146 孫子歌訣
(1)題目描述
存在一個數x,除以3餘2,除以5餘3,除以7餘2,然後求這個數。明朝數學家程大位将解法編成易于上口的《孫子歌訣》︰
三人同行七十稀,
五樹梅花廿一支,
七子團圓正半月,
除百零五使得知。
3人同行“70”稀,3的餘數乘以70,5樹梅花“21”支,5的餘數乘以21,7子團圓正半月(15天),7的餘數乘以15。最後加在一起除以105看餘數。
格式
輸入格式: 無
.
輸出格式: 輸出整型
樣例1
輸入格式:無
.
輸出格式:23
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x=1;
while(x++){
if(x%3==2&&x%5==3&&x%7==2){
cout<<x;
break;
}
}
return 0;
}
47. MT1147 古人的剩餘定理
(1)題目描述
今有物不知其數,
三三數之剩二,
五五數之剩三,
七七數之剩二。
問物最少幾何?
格式
輸入格式: 無
.
輸出格式: 輸出整型
樣例1
輸入格式:無
.
輸出格式:23
解析:
同一道題換了個說法罷了
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x=1;
while(x++){
if(x%3==2&&x%5==3&&x%7==2){
cout<<x;
break;
}
}
return 0;
}
48. MT1148 隐晦餘8
(1)題目描述
存在一個數x(大于10),除以3餘2,除以5餘3,除以7餘1,求這個數最小值。
格式
輸入格式: 無
.
輸出格式: 輸出整型
樣例1
輸入格式:無
.
輸出格式:113
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x=11;
while(x++){
if(x%3==2&&x%5==3&&x%7==1){
cout<<x;
break;
}
}
return 0;
}
49. MT1149 餘數
(1)題目描述
存在一個數x(大于10),除以7餘2,除以11餘4,除以13餘5,求這個數最小值。
格式
輸入格式:無
.
輸出格式: 輸出整型
樣例1
輸入格式:無
.
輸出格式:499
(2)參考代碼
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x=11;
while(x++){
if(x%7==2&&x%11==4&&x%13==5){
cout<<x;
break;
}
}
return 0;
}
50. MT1150 戰死四五百
(1)題目描述
帶1500名兵士打仗,戰死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。問戰死多少人。
格式
輸入格式:無
.
輸出格式: 輸出整型
樣例1
輸入格式:無
.
輸出格式:451
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int i=1;
for(int i=1500;i>=0;i--){
if(i%3==2&&i%5==4&&i%7==6&&i<=1100){
cout<<1500-i;
break;
}
}
return 0;
}
小結(四)
- 整除範例:MT1145