题单地址:选择结构题单
M 最大最小值
题意:输入三个数,输出其中最大值和最小值。
分析:使用max函数和min函数即可完成
题解:
#include
using namespace std;
int main()
{int a,b,c;cin >> a >> b >> c;cout << "The maximum number is : " << max(a,max(b,c)) << endl;cout << "The minimum number is : " << min(a,min(b,c));return 0;
}
N 送分题
题意:输入三个数,不改变三个数的顺序的情况下,添加括号或+或*,使得三个数的运算结果最大。
分析:由于三个数的加乘只有六种结果,列举出来即可。
题解:
#include
using namespace std;
int main()
{int a,b,c;cin >> a >> b >> c;int ans = 0;ans = max(ans, a+b*c);ans = max(ans, a*b+c);ans = max(ans, a+b+c);ans = max(ans, a*b*c);ans = max(ans, a*(b+c));ans = max(ans, (a+b)*c);cout << ans;return 0;
}
O 四季
题意:输入年月,输出对应的季节。
分析:季节只与月份有关,使用取模运算求出月份,if-else语句判断季节。
题解:
#include
using namespace std;
int main()
{int year;cin >> year;int month = year%100;if(month>=3 && month<=5)cout << "spring";else if(month>=6 && month<=8)cout << "summer";else if(month>=9 && month<=11)cout << "autumn";elsecout << "winter";return 0;
}
P B是不是太迟了
题意:输入年月日,判断是否大于2020/10/29。
分析:使用scanf的格式化输出,去除月和日,比较日期和10月29的前后大小。
题解:
#include
using namespace std;
int main()
{int y,m,d;scanf("%d/%d/%d",&y,&m,&d);if(m>10) cout << "QAQ";else{if(m==10&&d>28) cout << "QAQ";elsecout << "No. It's not too late.";}return 0;
}
Q 前天是哪天
题意:输入日期,输入这一天的前一天的日期。
分析:判断日期为1或2的时候会变成前一个月份,月份为1,会变成前一个年份,需要判断闰年。注意输出格式。(不然wa7个点。
题解:
#include
using namespace std;
bool ex(int year)
{if((year%4==0 && year%100!=0)||(year%400==0))return 1;return 0;
}
int s[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int ss[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main()
{int a,b,c;scanf("%d-%d-%d",&a,&b,&c);if(c>=3){c-=2;}else{if(b>=2){c-=2;if(ex(a))c+=ss[b-1];elsec+=s[b-1];b-=1;}else{a-=1;b=12;c-=2;c+=31;}}printf("%d-%02d-%02d",a,b,c);return 0;
}
R L1-2单位换算
题意:给你英尺数,换算成毫米并输出。
分析:直接写出简单算式即可。
题解:
#include
using namespace std;
int main()
{int n;cin >> n;cout << n*12*2.54*10;return 0;
}
S 纸牌
题意:两张数值为n的纸牌,每次操作可以让一张纸牌的数值减去小于等于另一张纸牌数值的数,问三次操作后,两纸牌的和最小为多少。
分析:写几个样例不难发现,当n为偶数时,纸牌最小和为n/2,当n为奇数时,最小和为n/2+1。
题解:
#include
using namespace std;
int main()
{int n;cin >> n;if(n&1)cout << n/2+1;elsecout << n/2;return 0;
}
T 排队领水
题意:n个人排队,不少于a个人在他前面,不多于b个人在他后面。
分析:前面取最少的a个人,后面就是取0、1、2…b个位置。但如果n-a比较大,就只有n-a个位置。
题解:
#include
using namespace std;int main()
{int n, a, b;cin >> n >> a >> b;n-=a;cout << min(n,b+1);return 0;
}
U 可编程拖拉机比赛
题意:比赛中10%、20%、30%的队伍会获得金牌、银牌、铜牌,上取整会使很多奖牌上升一级,问多少铁牌变铜牌、铜牌变银牌、银牌变金牌。
分析:上取整和下取整,相减即可。
题解:
#include
using namespace std;
int main()
{double n;cin >> n;int a,b,c,aa,bb,cc;a = (int)(n*0.1);b = (int)(n*0.2);c = (int)(n*0.3);aa = ceil(n*0.1);bb = ceil(n*0.2);cc = ceil(n*0.3);int aaa, bbb, ccc;aaa = aa - a;bbb = bb - b;ccc = cc - c;cout << aaa << " ";cout << aaa + bbb << " ";cout << aaa + bbb + ccc << endl;return 0;
}
V [NOIP2004]不高兴的津津
题意:输入津津上课时间和上复习班时间,津津的学习时间越长越会不高兴,问哪一天最不高兴,一样最不高兴就输出最前面的一天。
分析:把上课时间和上复习班的时间相加,判断最大的一天。
题解:
#include
using namespace std;
int main()
{int ans=0;int max=0;for(int i=1;i<=7;i++){int x, y;cin >> x >> y;int p = x + y;if(p>max){ans = i;max = p;}}cout << ans;return 0;
}
W [NOIP2008]ISBN号码
题意:输入合法的ISBN的号码,要求按规则计算ISBN的识别码,判断识别码是否正确。
分析:以此取出各位数字,计算后与识别码对比,输出即可。
题解:
#include
using namespace std;
int main()
{int ans=0;int max=0;for(int i=1;i<=7;i++){int x, y;cin >> x >> y;int p = x + y;if(p>max){ans = i;max = p;}}cout << ans;return 0;
}