报数(两种方法)——2019/12/1(CCF认证)

文章目录

  • 1 题目
  • 2 解析
  • 3 参考代码

1 题目

报数(两种方法)——2019/12/1(CCF认证)_第1张图片

2 解析

读题仔细,问的是每个人跳过的次数,不是第几轮被跳过。
求解方法:求余为0来判断是否能整数7,用类似于进制转换的方法求某一位是7(或者使用字符串的方法,用find成员函数/或是使用打表的方法)

3 参考代码

#include 
#include 
#include 
using std::string;

#include 
using std::stringstream;

bool  isSeven(int x){
     
    if(x % 7 == 0)//被7整除
        return  true;

    int temp;
    do{
     //是否有有某位含有7
        temp = x % 10;
        if(temp == 7){
     
            return true;
        }
        x /= 10;
    }while(x != 0);

    return false;
}

string itoString(int num){
     
    stringstream stream;
    stream << num;
    return stream.str();
}

bool isSeven2(int x){
     
    if(x % 7 == 0)
        return  true;

    string str = itoString(x);
    if(str.find('7') == string::npos){
     
        return  false;
    }
    return true;
}

int main(int argc, char** argv){
     

    int n;
    scanf("%d", &n);
    int cnt = 0;
    int num = 0;
    int ans[4];
    memset(ans, 0, sizeof(ans));

    while(cnt <= n){
     
        num++;
        if(isSeven2(num)){
     
            ans[num % 4]++;
        }else{
     
            cnt++;
        }
    }

    for (int i = 1; i != 4; ++i) {
     
        if(i != 1) printf("\n");
        printf("%d",ans[i]);
    }
    printf("\n%d", ans[0]);
    return  0;
}

你可能感兴趣的:(#,CCF,c++,算法)