本题的解题思路:就是使用两个标记(cnt1,cnt),一个用来标记个数,另一个用来标记最终要数到的数 ,对于甲乙丙丁可以用一个for循环即可,含有7或7的倍数,用STL的string中的find函数即可。如果想验证结果是否正确可以检查cnt1与甲乙丙丁四人跳过数的总和的和即可。
具体代码如下:
/*
Name:
Copyright:
Author: Joy
Description:
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int a[5];
memset(a,0,sizeof(a));
int cnt = 1,cnt1=0;
while(cnt1<n){
for(int i =1;i<=4;i++){
cnt1++;
string s = to_string(cnt);
if(s.find('7')!=s.npos || cnt%7==0){//检查是否含有7或7的倍数
a[i]++;
cnt1--;
}
if(cnt1>=n) break;
cnt++;
}
}
for(int i = 1;i<=4;i++){
cout<<a[i]<<endl;
}
return 0;
}