清风雪月
2021-09-25 21:38:29
如果你没读过题目,那->传送门
这道题的题意可以这样理解,已知n,求第n个既不是3的倍数也不是5的倍数的数。
这么简单,于是......
//~柠月~
#include<bits/stdc++.h>
using namespace std;
int n,x;
int main()
{
cin>>n;
int i=1,j=0;
while(j<n)
{
if(i%3!=0&&i%5!=0)
{
j++;
x=i;
}
i++;
}
cout<<x<<endl;
return 0;
}
评测记录
emmm......35分真酸爽
当然,这个早就考虑过了
那么,打表?当然不可能。
因此我们需要找规律。
为了弄清楚规律,我们可以编一个程序来看看序列。(m==Moo);\ 1 2 m 4 m m 7 8 m m 11 m 13 14 m
16 17 m 19 m m 22 23 m m 26 m 28 29 m
31 32 m 34 m m 37 38 m m 41 m 43 44 m
于是我们发现,Moo的位置重复了。根据这个规律,我们发现,每15个数字一个循环,而其中有8个非Moo的。
1 2 4 7 8 11 13 14
再看看第二轮的第一个16,1+15?没错了,这样子我们就可以得出一个公式 第n个等于(n-1)/8* 15+第一轮的第n%8个数字(其中为0即为14)
那么,接下来就要上代码了(复制之前记得先看完解析哦)
//~柠月~
#include<bits/stdc++.h>
using namespace std;
int n,x;
int main()
{
cin>>n;
x=(n-1)/8;
n%=8;
switch(n)
{
case 0:cout<<14+x*15<<endl;break;
case 1:cout<<1+x*15<<endl;break;
case 2:cout<<2+x*15<<endl;break;
case 3:cout<<4+x*15<<endl;break;
case 4:cout<<7+x*15<<endl;break;
case 5:cout<<8+x*15<<endl;break;
case 6:cout<<11+x*15<<endl;break;
case 7:cout<<13+x*15<<endl;break;
}
return 0;
}