$题解 CF110A 【Nearly Lucky Number】$

[$ CF110A \ Nearly \ Lucky \ Number\(](https://www.luogu.org/problem/CF110A) 还是一道比较不错的题目,可以拿来练练手\)(QAQ)$。


题目中虽说\(n\)\(long \ long\)范围内,但不知为什么,我一看到要分解数字就想用字符串做。
输入就不说了……
因为要判断\(n\)是否为"类幸运数字",所以,我们可以开一个自定义函数pd1,函数的类型应该是bool,因为要判断是否为"类幸运数字"吗。

bool pd1(string s)  //自定义函数
{
	int t=0;  //计数器清零
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='7'||s[i]=='4')
	    t++;  //如果数是'4'或'7'的话,计数器++
	}
	if(pd2(t)) return 1;  //判断计数器是否符合条件
	return 0;   //不符合条件,返回0
}

嘿,本代码还没写完整,看到代码中的这一句了吗if(pd2(t)) return 1; pd2(t)又是什么鬼?别急别急,我们再给出一下代码:

bool pd2(int n)
{
	if(n==0) return 0;  //没有'4'或'7' ,返回0
	while(n!=0)
	{
		if(n%10!=7)
		{
			if(n%10!=4)
			return 0;  //不符合条件,返回0
		}
		if(n%10!=4)
		{
			if(n%10!=7)
			return 0;  //不符合条件,返回0
		}
		n/=10;
	}   //分解n
	return 1;   //一定符合条件,返回1
}

好了,大致内容就这些,下面给出完整代码:

#include<bits/stdc++.h>
using namespace std;
bool pd2(int n)
{
	if(n==0) return 0;
	while(n!=0)
	{
		if(n%10!=7)
		{
			if(n%10!=4)
			return 0;
		}
		if(n%10!=4)
		{
			if(n%10!=7)
			return 0;
		}
		n/=10;
	}
	return 1;
}
bool pd1(string s)
{
	int t=0;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]=='7'||s[i]=='4')
	    t++;
	}
	if(pd2(t)) return 1;
	return 0;
}
int main()
{
	string s;
	cin>>s;
	if(pd1(s)) cout<<"YES"<<endl;
	else cout<<"NO"<<endl;
}
posted @ 2019-08-10 13:09  Luke·Skywalker  阅读(243)  评论(0)    收藏  举报