1.台球游戏
【问题描述】
在本台球游戏中,包含多种颜色的球,其中:红球15只各1分、黄球1只2分、绿球1只3分、咖啡球1只4分、蓝球1只5分、粉球1只6分、黑球1只7分。
球的颜色表示为:
r-红色球 y-黄色球 g-绿色球 c-咖啡色球 b-蓝色球 p-粉红球 B-黑色球
其中红球可能一次打进多个,且打进后不再摆回,其他球打进之后需要再摆回。
请计算n次击打之后总的得分。
【输入形式】
输入第一行为非负整数n,表示一个人进行了n次击打。
接下来为n次击打记录,每次记录有两种形式:
如果打进红球,则有两行, 第一行为r,第二行为一个整数(<=15),表示打进的红球个数
如果打进其他球,仅有一行,为ygcbpB中任意一个字符。
【输出形式】
输出一个整数,表示该人最终的得分。
【样例输入1】
5 r 3 g y r 1 B
【样例输出1】
16
【样例输入2】
5 c g y c B
【样例输出2】
20
【样例说明】
本题计算时无需考虑真实台球竞赛规则。
//台球游戏
//在本台球游戏中,包含多种颜色的球,其中:红球15只各1分、黄球1只2分、绿球1只3分、咖啡球1只4分、蓝球1只5分、粉球1只6分、黑球1只7分。
//
// 球的颜色表示为:
//
// r-红色球 y-黄色球 g-绿色球 c-咖啡色球 b-蓝色球 p-粉红球 B-黑色球
//
// 其中红球可能一次打进多个,且打进后不再摆回,其他球打进之后需要再摆回。
//
// 请计算n次击打之后总的得分。
#include<iostream>
using namespace std;
int main()
{
int n,tem,score=0;
char ch;
cin>>n;
while(n--){
cin>>ch;
if(ch=='r'){
cin>>tem;
score+=tem*1; //红球得分*个数
}else if(ch=='y'){ //黄球
score+=2;
}else if(ch=='g'){ //绿球
score+=3;
}else if(ch=='c'){ //咖啡色
score+=4;
}else if(ch=='b'){ //蓝色
score+=5;
}else if(ch=='p'){ //粉色
score+=6;
}else if(ch=='B'){ //黑色
score+=7;
} //优化可以用swicth
}
cout<<score<<endl;
return 0;
}
2.ch3-4 分段函数求解
【问题描述】
根据以下函数关系,对输入的每个x值,求y值。函数关系:
(1)y=x*(x+2) 2<x<=10
(2)y=2*x -1<x<=2
(3)y=x-1 x<=-1
【输入形式】
输入一个小数x。
【输出形式】
输出对应的y值(6位小数)
【样例输入】
1
【样例输出】
2.000000
【样例说明】
x=1,则推出y=2*x,则y=1*1=2,保留6位小数输出2.000000
【用例规模与约定】
所有评测用例满足:-10000000 ≤ x ≤ 10。
//ch3-4 分段函数求解
//根据以下函数关系,对输入的每个x值,求y值。函数关系:
//(1)y=x*(x+2) 2<x<=10
//(2)y=2*x -1<x<=2
//(3)y=x-1 x<=-1
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double x,y;
cin>>x;
if(2<x && x<=10){
y=x*(x+2);
}else if(-1<x && x<=2){
y=2*x;
}else if(x<=-1){
y=x-1; //分段函数
}
cout<<fixed<<setprecision(6)<<y<<endl; //保留6位小数
return 0;
}
3.ch3-5 3,5,7整除
【问题描述】
输入一个整数,判断其能否被3、5、7整除,若:
(1)能同时被3,5,7整除,则输出It's divisible by 3,5,7;
(2)能被其中两数(要指出哪两个)整除(如能被3,7整除),则输出It's divisible by 3,7;
(3)能被其中一个数(要指出哪一个)整除(如能被3整除),则输出It's divisible by 3;
(4)不能被3,5,7任一个整除,则输出null。
【输入形式】
输入一个整数n。
【输出形式】
输出一个判断信息,表示答案。
【样例输入】
30
【样例输出】
It's divisible by 3,5
【样例说明】
30能被3和5整除,但是不能被7整除。
【用例规模与约定】
所有评测用例满足:-1000000 ≤ n ≤ 10000000。
//ch3-5 3,5,7整除
//输入一个整数,判断其能否被3、5、7整除,若:
//
//(1)能同时被3,5,7整除,则输出It's divisible by 3,5,7;
//
//(2)能被其中两数(要指出哪两个)整除(如能被3,7整除),则输出It's divisible by 3,7;
//
//(3)能被其中一个数(要指出哪一个)整除(如能被3整除),则输出It's divisible by 3;
//
//(4)不能被3,5,7任一个整除,则输出null。
//
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
if(n%3==0 && n%5==0 && n%7==0){
cout<<"It's divisible by 3,5,7"<<endl; //列出所有情况
}else if(n%3==0 && n%5==0){
cout<<"It's divisible by 3,5"<<endl;
}else if(n%3==0 && n%7==0){
cout<<"It's divisible by 3,7"<<endl;
}else if(n%5==0 && n%7==0){
cout<<"It's divisible by 5,7"<<endl;
}else if(n%3==0){
cout<<"It's divisible by 3"<<endl;
}else if(n%5==0){
cout<<"It's divisible by 5"<<endl;
}else if(n%7==0){
cout<<"It's divisible by 7"<<endl;
}else{
cout<<"null"<<endl;
}
return 0;
}
4.ch3-6 成绩分类
【问题描述】
给定一个整数表示考试成绩,判断并输出该成绩属于哪一类。设90分及以上 为“A”,80分至89分为“B”,70分至79分为“C”,60分至69分 为“D”,60分以下为“E”。
【输入形式】
输入一个整数成绩。
【输出形式】
输出一个字符,表示成绩的等级(大写字母)。
【样例输入】
59
【样例输出】
E
【样例说明】
59分低于60分,判定为E。
【用例规模与约定】、
所有评测用例满足:0 ≤ n ≤ 100。
//ch3-6 成绩分类
//给定一个整数表示考试成绩,
//判断并输出该成绩属于哪一类。设90分及以上 为“A”,
//80分至89分为“B”,70分至79分为“C”,60分至69分 为“D”,60分以下为“E”。
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n>=90){
cout<<"A";
}else if(n>=80){
cout<<"B";
}else if(n>=70){
cout<<"C";
}else if(n>=60){
cout<<"D";
}else{
cout<<"E"; //分类
}
return 0;
}
5.小芳找工作
【问题描述】
小芳在校期间成绩优秀,毕业之前她决定去找一份她喜欢的工作,她将在自己中意的公司中选择,并设定了3个条件,满足其中2个条件的工作她认为可以接受。这三个条件分别为:
1. 月薪不低于5000元
2. 有带薪休假
3. 离家不超过2000公里
请根据某公司给定的3个给定条件的数据,判断小芳是否应该接受该公司的offer。
【输入形式】
输入一行包含3个数据,分别表示公司给定的月薪(整数)、有无带薪休假(y-有,n-无)、离家距离(整数)
【输出形式】
输出一行,Accept为接受,Refuse为拒绝
【样例输入】
5500 y 1500
【样例输出】
Accept
//小芳找工作
//小芳在校期间成绩优秀,毕业之前她决定去找一份她喜欢的工作,她将在自己中意的公司中选择,并设定了3个条件,满足其中2个条件的工作她认为可以接受。这三个条件分别为:
//
// 1. 月薪不低于5000元
//
// 2. 有带薪休假
//
// 3. 离家不超过2000公里
//
// 请根据某公司给定的3个给定条件的数据,判断小芳是否应该接受该公司的offer。
#include<iostream>
using namespace std;
int main()
{
int salary,dis;
char ch;
cin>>salary>>ch>>dis;
if(salary>=5000 && ch=='y'){
cout<<"Accept";
}else if(salary>=5000 && dis<=2000){
cout<<"Accept";
}else if(ch=='y' && dis<=2000){
cout<<"Accept";
}else{
cout<<"Refuse"; //分类讨论
}
return 0;
}
6.输入字符统计
【问题描述】
从键盘输入n个字符,请分别统计大写字母、小写字母、数字、其他字符的个数并输出;还需要输出所有数字字符之和。
【输入形式】
第一行为一个整数n(100>=n>=0),接下来n行每行一个字符。
【输出形式】
输出第1行为4个整数,分别表示大写字母、小写字母、数字、其他字符的个数,第2行为一个数字,表示其中所有数字字符所对应的数字之和,当输入的字符中不包含数字字符时,没有第2行。
【样例输入1】
5 a A 5 6 @
【样例输出1】
1 1 2 1 11
【样例输入2】
5 a A B Z !
【样例输出2】
3 1 0 1
//输入字符统计
//从键盘输入n个字符,请分别统计大写字母、小写字母、数字、其他字符的个数并输出;还需要输出所有数字字符之和。
#include<iostream>
using namespace std;
int main()
{
int n,c1=0,c2=0,c3=0,c4=0,s=0;
char ch;
cin>>n;
while(n--){
cin>>ch;
if(ch>='A' && ch<='Z'){
c1+=1; //大写字母
}else if(ch>='a' && ch<='z'){
c2+=1; //小写字母
}else if(ch>='0' && ch<='9'){
c3+=1; //数字
s+=ch-'0'; //求和
}else{
c4+=1; //其他字符
}
}
cout<<c1<<" "<<c2<<" "<<c3<<" "<<c4<<endl;
if(c3!=0){ //判断有无数字
cout<<s<<endl;
}
return 0;
}
7.四个数排序
【问题描述】
从键盘输入4个整数,将其按照从大到小的顺序输出。
【输入形式】
输入一行4个整数
【输出形式】
在一行中,输出排序后的4个整数
【样例输入】
15 234 5 18
【样例输出】
234 18 15 5
//四个数排序
//从键盘输入4个整数,将其按照从大到小的顺序输出。
#include<iostream>
using namespace std;
int main()
{
int arr[4]={0};
for(int i=0;i<4;i++){
cin>>arr[i];
}
for(int i=0;i<4;i++){
for(int j=i+1;j<4;j++){
if(arr[i]<arr[j]){
int tem=arr[i];
arr[i]=arr[j];
arr[j]=tem;
} //冒泡排序
}
}
for(int i=0;i<4;i++){
cout<<arr[i]<<" ";
}
return 0;
}
8.数字单词
【问题描述】
输入一个字符,如果为数字字符0-9,则输出其对应英文单词(Zero、One、...、Nine),否则输出Other。
【输入形式】
一行一个字符
【输出形式】
输出一个单词
【样例输入】
5
【样例输出】
Five
//数字单词
//输入一个字符,如果为数字字符0-9,则输出其对应英文单词(Zero、One、...、Nine),否则输出Other。
#include<iostream>
using namespace std;
int main()
{
char ch;
cin>>ch;
if(ch>='0' && ch<='9'){
switch(ch){
case '0':
cout<<"Zero";
break;
case '1':
cout<<"One";
break;
case '2':
cout<<"Two";
break;
case '3':
cout<<"Three";
break;
case '4':
cout<<"Four";
break;
case '5':
cout<<"Five";
break;
case '6':
cout<<"Six";
break;
case '7':
cout<<"Seven";
break;
case '8':
cout<<"Eight";
break;
case '9': //switch语句讨论
cout<<"Nine";
break;
}
}else{
cout<<"Other";
}
return 0;
}
9.数小木块
【问题描述】
在墙角堆放着一堆完全相同的正方体小木块,如下图所示:
因为木块堆得实在是太有规律了,你只要知道它的层数就可以计算所有木块的数量了。
【输入形式】
只有一个整数 n ,表示这堆小木块的层数,已知1 <= n <= 100 。
【输出形式】
只有一个整数,表示这堆小木块的总数量。
【样例输入】
5
【样例输出】
35
//数小木块
//在墙角堆放着一堆完全相同的正方体小木块,
//因为木块堆得实在是太有规律了,你只要知道它的层数就可以计算所有木块的数量了。
#include<iostream>
using namespace std;
int main()
{
int n,s=0,t=0;
cin>>n;
for(int i=1;i<=n;i++){
t+=i; //当前层的木块数目
s+=t; //木块总数
}
cout<<s<<endl;
return 0;
}
10.桃子问题
【问题描述】
某人摘下一些桃子,第一天卖掉一半,又吃了一个,第二天卖掉剩下的一半,又吃了一个,以后各天都是如此处理,到第n天发现只剩下一只桃子,试编写程序计算一共摘的桃子个数。
【输入形式】
一行:一个整数n(1 < n <= 20)
【输出形式】
一行:一个整数,表示一开始的桃子个数。
【样例输入】
2
【样例输出】
4
//桃子问题
//某人摘下一些桃子,第一天卖掉一半,又吃了一个,第二天卖掉剩下的一半,又吃了一个,
//以后各天都是如此处理,到第n天发现只剩下一只桃子,试编写程序计算一共摘的桃子个数。
#include<iostream>
using namespace std;
int main()
{
int n,y=1; //记录桃子总数
cin>>n;
while(n>1){
y=(y+1)*2; //递推
n-=1;
}
cout<<y<<endl;
return 0;
}
11.三个人比大小
【问题描述】
输入A、B、C3个人的生日,格式为:yyyy mm dd,按照年龄从大到小输出。
【输入形式】
输入有3行,分别表示A、B、C三个人的生日。
【输出形式】
ABC或ACB或BAC或BCA或CAB或CBA
【样例输入】
2018 1 12 1997 7 1 2000 12 31
【样例输出】
BCA
【技巧提示】
生日比较需要按照优先级分别比较年月日,可以考虑将年月日转化为一个整数 s=10000*year+100*month+day
//三个人比大小
//输入A、B、C3个人的生日,格式为:yyyy mm dd,按照年龄从大到小输出。
#include<iostream>
using namespace std;
int main()
{
int y1,m1,d1,y2,m2,d2,y3,m3,d3;
cin>>y1>>m1>>d1>>y2>>m2>>d2>>y3>>m3>>d3;
int s1=y1*10000+m1*100+d1;
int s2=y2*10000+m2*100+d2;
int s3=y3*10000+m3*100+d3; //转化成一个整数
if(s1>s2&&s2>s3){
cout<<"CBA";
}else if(s1>s3&&s3>s2){
cout<<"BCA";
}else if(s2>s1&&s1>s3){
cout<<"CAB"; //分类讨论
}else if(s2>s3&&s3>s1){
cout<<"ACB";
}else if(s3>s1&&s1>s2){
cout<<"BAC";
}else if(s3>s2&&s2>s1){
cout<<"ABC";
}
return 0;
}
12.小希找工作
【问题描述】
小希看到小芳很容易就找到了她满意的工作,他也想去尝试一下,并参考了小芳找工作的方法。
与小芳不同的是,小希希望根据三个条件综合评估来选择。
月薪得分: 月薪/5000*100取整
带薪假得分:有20分,无0分
离家距离得分:不超过2000公里为100分。每超过200公里减10分,不足200公里按200公里计算,直至0分为止。
给定3个公司A、B、C的数据,根据分数最大来判断小希应该接受哪家公司的offer。如果分数相同,按照A、B、C的顺序进行优先选择。
【输入形式】
输入为3行(分别为A、B和C公司的数据),每行包含3个数据,分别表示公司给定的月薪(整数)、有无带薪休假(y-有,n-无)、离家距离(整数),所有的输入保证没有两个公司最终的得分相等。
【输出形式】
输出一行一个字符(A或B或C,表示小希应该选择的公司)
【样例输入】
24723 y 23588 37395 n 32313 36389 n 21061
【样例输出】
B
//小希找工作
// 小希看到小芳很容易就找到了她满意的工作,他也想去尝试一下,并参考了小芳找工作的方法。
//
// 与小芳不同的是,小希希望根据三个条件综合评估来选择。
//
// 月薪得分: 月薪/5000*100取整
//
// 带薪假得分:有20分,无0分
//
// 离家距离得分:不超过2000公里为100分。每超过200公里减10分,不足200公里按200公里计算,直至0分为止。
//
// 给定3个公司A、B、C的数据,根据分数最大来判断小希应该接受哪家公司的offer。如果分数相同,按照A、B、C的顺序进行优先选择。
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int s1,d1,s2,d2,s3,d3,f1=0,f2=0,f3=0;
char c1,c2,c3;
cin>>s1>>c1>>d1>>s2>>c2>>d2>>s3>>c3>>d3;
f1+=(s1/5000)*100;
f2+=(s2/5000)*100;
f3+=(s3/5000)*100; //月薪得分计算
if(c1=='y'){
f1+=20;
}
if(c2=='y'){
f2+=20;
}
if(c3=='y'){
f3+=20;
}
if(d1<=2000){
f1+=100;
}else if(d1<=4000){
f1+=100-ceil((d1-2000)/200.0)*10;
}
if(d2<=2000){
f2+=100;
}else if(d2<=4000){
f2+=100-ceil((d2-2000)/200.0)*10; //向上取整
}
if(d3<=2000){
f3+=100;
}else if(d3<=4000){
f3+=100-ceil((d3-2000)/200.0)*10;
}
if(f1>=f2&&f1>=f3){
cout<<"A";
}else if(f2>=f3&&f2>f1){ //结果判断
cout<<"B";
}else if(f3>f2&&f3>f1){
cout<<"C";
}
return 0;
}
13.个人所得税计算
【问题描述】
2018年8月31日,第十三届全国人民代表大会常务委员会第五次会议《关于修改〈中华人民共和国个人所得税法〉的决定》,将个税免征额由3500元提高到5000元。 缴纳个人所得税是收入达到缴纳标准的公民应尽的义务,个人所得税率是由国家相应的法律法规规定的,根据个人的收入计算。
个人所得税的计算公式为:
应缴税额=(月收入-5000-专项扣除)* 税率 - 速算扣除数
请根据输入的月收入和专项扣除额计算相应的应缴税额。
【输入形式】
输入为一行两个整数,分别表示月收入和专项扣除额。
【输出形式】
输出为一个数,即缴税额。
【样例输入】
10000 2000
【样例输出】
90
//个人所得税计算
//个人所得税的计算公式为:
//
// 应缴税额=(月收入-5000-专项扣除)* 税率 - 速算扣除数
//
// 请根据输入的月收入和专项扣除额计算相应的应缴税额。
#include<iostream>
using namespace std;
int main()
{
int s,k,y=0;
cin>>s>>k;
if((s-5000-k)>=0){ //保证>=0
if((s-5000-k)<=3000){
y=(s-5000-k)*0.03-0;
}else if((s-5000-k)<=12000){
y=(s-5000-k)*0.1-210;
}else if((s-5000-k)<=25000){
y=(s-5000-k)*0.2-1410;
}else if((s-5000-k)<=35000){
y=(s-5000-k)*0.25-2660;
}else if((s-5000-k)<=55000){
y=(s-5000-k)*0.3-4410;
}else if((s-5000-k)<=80000){
y=(s-5000-k)*0.35-7160;
}else if((s-5000-k)>80000){
y=(s-5000-k)*0.45-15160; //分类讨论
}
}
cout<<y<<endl;
return 0;
}
14.走路去上课还是骑车去上课?
【问题描述】
校园里,共享单车满地都是,有时候还真方便。但实际上。并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁上车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样快,输出一行"All"。
【输入形式】
输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。
【输出形式】
输出一行,如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样快,输出一行"All"。
【样例输入】
120
【样例输出】
Bike
【样例说明】
为避免浮点误差,本题中应使用双精度进行计算。
//走路去上课还是骑车去上课?
//校园里,共享单车满地都是,有时候还真方便。但实际上。并非去办任何事情都是骑车快,
//因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁上车的时间为27秒;
//停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,
//是骑车快还是走路快。如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样快,输出一行"All"。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int d;
double t1,t2;
cin>>d;
cout<<fixed<<setprecision(6); //设置精度
t1=50+d/3.0;
t2=d/1.2;
if(t1>t2){
cout<<"Walk";
}else if(t2>t1){
cout<<"Bike";
}else{
cout<<"All";
}
return 0;
}
15.运输打折问题
【问题描述】
某运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
里程(单位:公里) | 折扣 |
s<250 | 0 |
250≤s<500 | 2% |
500≤s<1000 | 5% |
1000≤s<2000 | 8% |
2000≤s<3000 | 10% |
3000≤s | 15% |
其中基本运费为每吨每公里1元,现请你帮助该运输公司设计自动计费程序来计算运输费用。
【输入形式】
输入为一行两个整数,分别表示运输的载重(吨)和里程(公里)。
【输出形式】
输出一行一个整数,表示运输费用
【样例输入】
1 200
【样例输出】
200
//运输打折问题
//某运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
//
//里程(单位:公里)
//
//折扣
//
//s<250
//
//0
//
//250≤s<500
//
//2%
//
//500≤s<1000
//
//5%
//
//1000≤s<2000
//
//8%
//
//2000≤s<3000
//
//10%
//
//3000≤s
//
//15%
//
//其中基本运费为每吨每公里1元,现请你帮助该运输公司设计自动计费程序来计算运输费用
#include<iostream>
using namespace std;
int main()
{
int m,d,s;
cin>>m>>d;
if(d<250){
s=m*d;
}else if(d<500){
s=m*d*(1-0.02);
}else if(d<1000){
s=m*d*(1-0.05);
}else if(d<2000){
s=m*d*(1-0.08);
}else if(d<3000){
s=m*d*(1-0.1);
}else{
s=m*d*(1-0.15);
}
cout<<s<<endl;
return 0;
}
16.三个数
【问题描述】
有三个非负整数a、b、c,现按随机顺序给出它们的两两和以及总和4个整数,即a+b、a+c、b+c、a+b+c,注意,给出的4个数的顺序是随机的,请根据这四个数求出a、b、c是多少?
【输入形式】
输入为一行4个正整数,x1、x2、x3、x4 (0≤xi≤109),表示a+b、a+c、b+c、a+b+c结果的随机顺序的值,输入保证能求出结果。
【输出形式】
输出为一行,以非递减的方式输出a、b、c,注意a、b、c可能相等。
【样例输入1】
3 6 5 4
【样例输出1】
1 2 3
【样例输入2】
201 101 101 200
【样例输出2】
1 100 100
//三个数
//有三个非负整数a、b、c,现按随机顺序给出它们的两两和以及总和4个整数,
//即a+b、a+c、b+c、a+b+c,注意,给出的4个数的顺序是随机的,请根据这四个数求出a、b、c是多少?
#include<iostream>
using namespace std;
int main()
{
long long x1,x2,x3,x4; //注意数字范围
int arr[4];
cin>>x1>>x2>>x3>>x4;
long long s=(x1+x2+x3+x4)/3; //a+b+c
arr[0]=s-x1;
arr[1]=s-x2; //假设为对应的值
arr[2]=s-x3;
arr[3]=s-x4;
for(int i=0;i<4;i++){
for(int j=i+1;j<4;j++){
if(arr[i]>arr[j]){
int tem=arr[i];
arr[i]=arr[j];
arr[j]=tem; //排序
}
}
} //必定arr[0]=0
cout<<arr[1]<<" "<<arr[2]<<" "<<arr[3]<<endl;
return 0;
}
17.爬虫
【问题描述】
一条虫子在n英寸深的井底,每次一分钟爬行u英寸,但是它在再次爬行前必须先休息1分钟, 在休息过程中它将滑落d英寸,在反复向上爬行和休息后,多长时间虫子能爬出这口井?在此过程中,分钟的小数部分向上取整,如果攀爬结束时虫子正好到达井的顶部,则视为虫子已经爬出。假定d<u,n<100,当n=0时输入结束。
【输入形式】
输入包括多个测试用例。每行包含3个正整数n、u、d,为上面所提到的值。
【输出形式】
每个测试用例输入一行,表示虫子爬出井的时间。
【样例输入】
10 2 1 20 3 1 0 0 0
【样例输出】
17 19
// 爬虫
// 一条虫子在n英寸深的井底,每次一分钟爬行u英寸,但是它在再次爬行前必须先休息1分钟,
// 在休息过程中它将滑落d英寸,在反复向上爬行和休息后,多长时间虫子能爬出这口井?
// 在此过程中,分钟的小数部分向上取整,如果攀爬结束时虫子正好到达井的顶部,则视为虫子已经爬出。假定d<u,n<100,当n=0时输入结束。
#include<iostream>
using namespace std;
int main()
{
int n,u,d,t;
while(true){
cin>>n>>u>>d;
t=0;
if(n==0){
break;
}
while(n>0){
n-=u; //爬行
t+=1;
if(n<=0){ //刚好到顶
break;
}
n+=d; //滑落
t+=1; //休息
}
cout<<t<<endl;
}
return 0;
}
18.这个月有多少天?
【问题描述】
输入年份和月份,输出该月份的天数。
【输入形式】
输入一行,两个整数,分别为年份和月份。
【输出形式】
一个整数,表示该月份的天数
【样例输入】
2018 3
【样例输出】
31
//这个月有多少天?
//输入年份和月份,输出该月份的天数。
#include<iostream>
using namespace std;
int main()
{
int year,month;
cin>>year>>month;
int leap=0; //闰年标记
if((year%4==0 && year%400!=0) || year%100==0){
leap=1; //判断闰年
}
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
cout<<31<<endl;
break;
case 4:
case 6:
case 9:
case 11:
cout<<30<<endl;
break;
case 2:
cout<<28+leap<<endl;
break; //特殊情况
}
return 0;
}