前言
通过上节的介绍,大家对while循环语句想必也有了一定的了解
那么在本篇中我们将来看一道较为复杂的例题,帮助大家巩固和进一步理解while循环语句。
例题(1/1)含k个3的数
题目描述
输入两个正整数m、k,其中1<m<100000,1<k<5,判断m能否被19整除且恰好含有k个3,若满足条件,则输出“YES”;若不满足条件,则输出“NO”。
输入格式
两行,m和k的值;第一行为m,第二行为k。
输出格式
满足条件时输出“YES”,不满足条件时输出“NO”
输入样例1
43833
3
输出样例1
YES
输入样例2
39331
3
输出样例2
NO
做法分析
根据题目,首先我们需要判断
m
m
m 能否整除
19
19
19,如果不可以就直接输出NO
如果可以则进行下一步判断。此处使用if语句进行判断即可。
如果
m
m
m 能够整除
19
19
19,就进行第二步判断:
m
m
m 是否恰好含有
k
k
k个
3
3
3。
这是整个程序的难点,我们可以通过while循环拆数解决,并定义计数变量进行计数
如果最终发现
m
m
m 中
3
3
3 的个数恰好等于
k
k
k 的值,就可以输出YES
;
如果不相等,则输出NO
。
或许很多同学会在这里有所疑问,while循环怎么拆数?
实际上很简单:我们先定义一个变量
在循环中用这个变量记录在
m
m
m 不等于
0
0
0 前
m
m
m %
10
10
10 的值(即得到
m
m
m 的每一位数),并在每次记录后判断该变量是否为
3
3
3,
如果是,则将计数变量的值加
1
1
1(计数变量初始值为
0
0
0 );并在每一次循环完成后将
m
/
10
m/10
m/10(去掉最后一位)。
当
m
=
=
0
m==0
m==0 时循环结束,将累加后的计数变量与
k
k
k 进行大小比较后输出结果。
完整代码演示
#include < iostream >
using namespace std;
int main(){
int m,k;
cin>>m>>k;
int e=0;
if(m%19==0){
while (m!=0){
int a=m%10;
m=m/10;
if (a==3){
e++;
}
}
if(e==k){
cout<<"YES";
}else {
cout<<"NO";
}
}
else {
cout<<"NO";
}
return 0;
}