思路:定义四个变量,分别记录甲乙丙丁报数跳过的次数。再定义一个变量count,记录当前的真实数值。从1开始判断这个数是否为7的倍数或包含7,若是则跳过,但count依然加1;否则n–;还可以利用count%4来区分甲乙丙丁。判断是否包含7时,循环得到个位十位百位……的数,分别判断是否为7.
#include <iostream>
using namespace std;
bool isseven(int x)
{
if(x%7==0) return true;
int m;
while(x>0)
{
m=x%10;
if(m==7)
return true;
x=x/10;
}
return false;
}
int main()
{
int n,a,b,c,d;
a=b=c=d=0;
int count=1;
cin >> n;
while(n)
{
if(count%4==1)
{
if(isseven(count)) a++;
else n--;
}
else if(count%4==2)
{
if(isseven(count)) b++;
else n--;
}
else if(count%4==3)
{
if(isseven(count)) c++;
else n--;
}
else if(count%4==0)
{
if(isseven(count)) d++;
else n--;
}
count++;
}
cout << a << endl << b << endl << c << endl << d << endl;
return 0;
}
注意:a=b=c=d=0;凡是用来计数的,都一定要初始化,否则结果会错。
判断多位数中是否含有7可以用这种循环的方法。
二刷
#include <iostream>
using namespace std;
bool is_seven(int c)
{
if(c%7==0)
return true;
else
{
while(c)
{
if(c%10==7)
return true;
c/=10;
}
}
return false;
}
int main()
{
int n;
int count=1;
int i=0;
int a[4]={0};
cin >> n;
while(n)
{
if(is_seven(count))
a[i%4]++;
else
n--;
count++;
i++;
}
for(int i=0;i<4;i++)
{
cout << a[i] << endl;
}
return 0;
}
不要忘了不是7的时候return false.
注意判断含有7的算法中只关注余数就行了,因为就算在得到的商里面有7,因为每次都是留下商再继续下一轮运算,所以7总会最终被作为余数检测出来。