思路:结果是由规律的,把相邻结果做差可以发现会出现2,1,3,1,2,3的循环
做这题发现了一个问题,那就是用c++输如输出会超时,哪怕是用了cin.sync_with_stdio(false);坑爹啊.
#include<stdio.h>
//#include<iostream>
//using namespace std;
int b[7]={2,1,3,1,2,3,3};
int a[214286]={0};
void f()
{
int i;
a[1]=3;
for(i=2;i<=214285;i++)
{
a[i]=a[i-1]+b[(i-2)%7];
}
}
int main()
{
f();
//cin.sync_with_stdio(false);
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",a[n]);
}
return 0;
}
还有个思路:仔细观察会发现其实输入的n和结果除以2相差并不大.然后将n=100000的结果为标准进行缩进,然后就.............
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=2*n+n/10+n/25+n/500+n/1250;;i++)
{
if(i/5+i/3-i/15==n)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
不过还是一样,用c++的输入输出会超时,伤不起啊伤不起.我这么写了之后被学长说是奇葩.- -!