一:问题
二:理解
1.用一个数组jump[4];来存储跳过的个数。
2.用realn,和num来计算不跳过的个数和数字的个数;
判断num是不是7的倍数,或者num中是不是含有7;
while(temp2 != 0)
{
temp1 = temp2%10;
temp2 /= 10;
if(temp1 == 7)
break;
}
if(temp1==7 || num%7==0)
{
jump[num%4]++;
num++;
continue;
}
3.jump[num%4]分别记录的是:
jump[1] 存储第一个数
jump[2] 存储第二个数
jump[3] 存储第三个数
jump[0] 存储第四个数
三:代码
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int num = 1;
int realn = 1;
int jump[4] = {0};
while(realn <= n)
{
int temp1 = 0;
int temp2 = num;
while(temp2 != 0)
{
temp1 = temp2%10;
temp2 /= 10;
if(temp1 == 7)
break;
}
if(temp1==7 || num%7==0)
{
jump[num%4]++;
num++;
continue;
}
num++;
realn++;
}
for(int i=1; i<4; i++)
cout << jump[i] << endl;
cout << jump[0] << endl;
return 0;
}
第二个代码:
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;
int num[4] = {0};
int counts = 0;
int main()
{
int n;
cin >> n;
int i = 1;
while(1)
{
if(!(i%7)) //是7的倍数
num[(i-1)%4]++;
else
{
int temp = i;
int a;
while(temp)
{
a = temp%10;
if(a == 7)
break;
temp /= 10;
}
if(a==7)
num[(i-1)%4]++;
else
counts++;
}
if(counts == n)
break;
i++;
}
for(int i=0; i<4; i++)
cout << num[i] << endl;
return 0;
}
感觉这个题目的数据有个坑,说的小于666,所以我只判断了个位与十位。结果提交只有60。
感觉这次的代码手感比上次的好。