首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

初学者!

2012-05-13 
菜鸟求助!!!!!!!!!!!!!#includestdio.hint main(){__int64 a[100001],n,iwhile(~scanf(%I64d,&n)&&n

菜鸟求助!!!!!!!!!!!!!
#include<stdio.h>
int main()
{
  __int64 a[100001],n,i;
  while(~scanf("%I64d",&n)&&n>=0)
  {
  a[0]=0;
  for(i=1;i<=n;i++)
  {
  if(i%3==0)
  a[i]=a[i-1]+i*i*i;
  else
  a[i]=a[i-1]+i;
  }
  printf("%I64d\n",a[n]);
  }
  return 0;
}
#include<stdio.h>
int main()
{
  __int64 a[100001],n,i;
  a[0]=0;
  for(i=1;i<=100000;i++)
  {
  if(i%3==0)
  a[i]=a[i-1]+i*i*i;
  else
  a[i]=a[i-1]+i;
  }
  while(~scanf("%I64d",&n)&&n>=0)
  {
  printf("%I64d\n",a[n]);
  }
  return 0;
}
以上这两个代码,可以解释一下,为什么第一个比第二个耗时更多一些?可以把这个知识点详细的解释一下吗?谢谢啦。。。

[解决办法]
第二个,你一次就把结果全部计算出来了,要结果就查找。第一个,是每输入一个数都去计算一篇,当然慢点。第二个就是ACM所说的打表法。

探讨
#include<stdio.h>
int main()
{
__int64 a[100001],n,i;
while(~scanf("%I64d",&amp;n)&amp;&amp;n>=0)
{
a[0]=0;
for(i=1;i<=n;i++)
{
if(i%3==0)
a[i]=a[i-1]+i*i*i;
else
a[i]=……

[解决办法]
第一个程序,每当你输入一次n的话,for循环就执行一次,而第二格程序for循环只执行一次。所以时间复杂度不同的。第一个是O(10000*n),第二格是O(10000+n),n表示输入次数。

热点排行