全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战训练一)
实战训练1—判断闰年
问题描述:
公历纪年法中,闰年分为普通闰年和世纪闰年,其中普通闰年是4的倍数,且不是100的倍数为闰年(例如2008);世纪闰年:公历年份是整百数,而且是400的倍数才是世纪闰年,例如1990年虽能被100整除而不能被400 整除,所以是平年,2000年是闰年。小明想编写程序实现判断公元年是否为闰年。
输入格式:
一行一个正整数year(year<=10000)。
输出格式:
一行,如果公元 year 年是闰年输出'Y',否则输出'N'。
输入输出样例:
输入样例1 | 输出样例1 |
2000 | Y |
输入样例2 | 输出样例2 |
2007 | N |
输入样例3 | 输出样例3 |
1900 | N |
问题分析:
首先根据题目的描述需要定义一个公元年变量year,从键盘上输入year的值,闰年的类别有普通闰年和世纪闰年,可以得出判断闰年的条件有两个:
1、普通闰年是4的倍数但不是100的倍数,即公元年year能被4整除,且不能被100整除;接下来将该条件转换成表达式:year能被4整除,说明year对4取余为0,表达式为:year%4==0,同理不能被100整除,说明year对100取余不为0,表达式为:year%100!=0,year能被4整除且不能被100整除,所以这两个表达式需要同时满足是'&&'的关系,即(year%4==0 )&& (year%100!=0)。
2、世纪闰年是整百数,而且是400的倍数,即公元年year能被400整除,接下来将该条件转换为表达式,year能被400整除,说明year对400取余为0,表达式为:year%400==0。
对于上面的两个条件,只需要满足条件1或者条件2其中一个条件就称year为闰年,即条件1和条件2是'||'的关系,对应的表达式为:((year%4==0 )&& (year%100 !=0)) || (year%400==0)。
具体程序如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
int year;//定义公元年year
cin>>year;//输入公元年year的值
if(((year%4==0 )&& (year%100 !=0)) || (year%400==0)){//判断闰年的条件为真
cout<<'Y'<<endl;
} else{
cout<<'N'<<endl;
}
return 0;
}
实战训练2—被3,5,7整除
问题描述:
给定一个整数,请判断它能否被3,5,7整除,并输出以下信息:
1、能同时被3,5,7 整除(直接输出3 5 7,每个数中间一个空格);
2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者3 7或者5 7,中间用空格分隔);
3、只能被其中一个数整除(输出这个整数);
4、不能被任何数整除,输出小写字符'n'。
输入格式:
输入一行,包括一个整数n。
输出格式:
输出一行,按照描述要求给出整数被3,5,7整除的情况。
输入输出样例:
输入样例1 | 输出样例1 |
105 | 3 5 7 |
输入样例2 | 输出样例2 |
21 | 3 7 |
输入样例3 | 输出样例3 |
20 | 5 |
输入样例4 | 输出样例4 |
8 | n |
问题分析:
根据题意定义一个整数变量n,并从键盘输入n的值,依据题目条件可知:
1、对于条件1需要判断n是否能被3,5,7整除,如果能被这3个数同时整除,可以写成表达式:(n%3==0) && (n%5==0) &&(n%7==0);
2、对于条件2,n可以被3,5,7中的任意两个数整除,可以分成3种情况:被3和5整除,被5和7整除,被3和7整除,所以可以写成表达式:(n%3==0 && n%5==0),(n%5==0 && n%7==0),(n%3==0 && n%7==0)
3、对于条件3,n只能被其中的一个数整除,即被3整除,被5整除,被7整除,所以可以写成表达式(n%3==0),(n%5==0),(n%7==0)
4、对于条件4,该数不能被3,5,7中的任何整数整除
针对上述4个条件,每个条件都是在上一个条件不成立的情况下,才会判断该条件,以及每个条件中的分条件也是同样的情况,即上一个分条件不成立,下一个分条件才会判断,所以使用多分支结构。
具体程序如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;//定义一个变量n
cin>>n;//输入n的值
if(n%3==0 && n%5==0 && n%7==0){// n能被3 5 7 同时整除
cout<<"3 5 7"<<endl;
}else if(n%3==0 &&n%5==0){//n不同被3个整数同时整除,只能被3和5同时整除
cout<<"3 5"<<endl;
}else if(n%3==0 &&n%7==0){//n不同被3个整数同时整除,只能被3和7同时整除
cout<<"3 7"<<endl;
}else if(n%5==0 &&n%7==0){//n不同被3个整数同时整除,只能被5和7同时整除
cout<<"5 7"<<endl;
}else if(n%3==0){//n只能被3整除
cout<<3<<endl;
}else if(n%5==0){//n只能被5整除
cout<<5<<endl;
}else if(n%7==0){//n只能被7整除
cout<<7<<endl;
}else{//n不能被任何整数整除
cout<<'n'<<endl;
}
return 0;
}