我 !又 !来 !了 !
时间限制:1 s内存限制:128 MB
计算鸭有两个正整数 m 和 k,其中 1<k<1000001<m<100000,1<m<51<k<5,判断 m 能否被 1919 整除,且各位数字中恰好含有 k 个 33。如果满足条件,则输出 YES
,否则,输出 NO
。
输入
m 和 k 的值,中间用单个空格间隔。
输出
满足条件时输出 YES
,不满足时输出 NO
。
样例
输入 1
43833 3
输出 1
YES
首先,判断能否被1919整除,可以直接用取模操作 %
。如果 m % 1919 == 0
,则说明可以被1919整除。
其次,需要统计数字中恰好含有k个33。我们可以通过将数字转换为字符串,然后使用字符串的find()函数来查找33的出现次数。例如:
string str = to_string(m); // 将数字转换为字符串
int cnt = 0; // 用于统计33的个数
int pos = str.find("33"); // 查找第一个33出现的位置
while (pos != string::npos) { // 如果找到了
cnt++; // 统计个数加1
pos = str.find("33", pos+1); // 查找下一个33出现的位置
}
最后,判断是否恰好含有k个33,只需判断 cnt == k
即可。
完整代码如下:
等一下,我们好像没有学find吧?
换一个:
#include<bits/stdc++.h>
using namespace std;
int main(){
int m , k , n , b , i = 0;
cin >> m >> k;
n=m;
while(n>=1){
b = n % 10;
if (b==3){
i++;
}
n /= 10;
}
if(i==k&&m%19==0){
cout<<"YES";
}
else cout<<"NO";
return 0;
}
听得懂吗