$题解 CF110A Nearly Lucky Number$

Posted luke-skywalker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$题解 CF110A Nearly Lucky Number$相关的知识,希望对你有一定的参考价值。

$ CF110A ? Nearly ?Lucky ?Number$
还是一道比较不错的题目,可以拿来练练手\((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;

以上是关于$题解 CF110A Nearly Lucky Number$的主要内容,如果未能解决你的问题,请参考以下文章

B - Nearly Lucky Number

[CF从零单排#13]122A - Lucky Division

HDU5985 Lucky Coins 概率dp

裴蜀定理CF1055C Lucky Days

裴蜀定理CF1055C Lucky Days

裴蜀定理CF1055C Lucky Days