800. 含k个3的数

我 !又 !来 !了 !

时间限制: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;
}

听得懂吗

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值