原题
Description
Mike is very lucky, as he has two beautiful numbers, 3 and 5. But he is so greedy that he wants infinite beautiful numbers. So he declares that any positive number which is dividable by 3 or 5 is beautiful number. Given you an integer N (1 <= N <= 100000), could you please tell mike the Nth beautiful number?
Input
The input consists of one or more test cases. For each test case, there is a single line containing an integer N.
Output
For each test case in the input, output the result on a line by itself.理解&思路
输出第100000个以内由3或者5组成的数。
数据量巨大,每一个数即时计算显然超时。
通过列举我发现这些数分别为:
3、 5、 6、 9、 10、12、15、
18、20、21、24、25、27、30、
······
即每7个数一个循环,每个循环对应上一循环数加15。AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[7]={3,5,6,9,10,12,15},i,n,j;
while(cin>>n)
{
if(n<=7)
{
cout<<a[n-1]<<endl;
continue;
}
else
{
j=n/7;
n%=7;
cout<<(a[n-1]+15*j)<<endl;
}
}
}
- 总结
开始试了预处理:
#include<bits/stdc++.h>
using namespace std;
int main()
{
vector<int> a;
int i,n;
for(i=3;a.size()<100000;i++)
{
if(i%3==0||i%5==0)
a.push_back(i);
}
while(1)
{
cin>>n;
cout<<a[n-1]<<endl;
}
}
仍超时。。。数据量太大。