比较2个具有相同逻辑的源代码

时间:2016-10-06 19:31:58

标签: c++ algorithm compare

这是我在hackerearth的“生命,宇宙和一切”的代码

为什么“我的解决方案”比“最佳解决方案”慢,即使是逻辑 用的是一样的!

事实上我认为我的逻辑应该更快,因为我在n!=42时打印了答案,但“最佳解决方案”必须首先检查n==42然后在数组中插入元素(执行'else '部分)。

请告诉我为什么“最佳解决方案”更快。

my solution :-

#include <iostream>
using namespace std;

int main()
{
  int n;
  while(1)
  {
     scanf("%d",&n);
     if(n!=42)
     {
        printf("%d\n",n);
     }
     else
        break;
  }
  return 0;
}
Time Taken: 1.010669 seconds
---------------------------------------------------------
best solution:-
#include <iostream>
using namespace std;

int main()
{
  int n,a[10001],i=0,j;
  while(1)
  {
    cin>>n;
    if(n==42)
    break;
    else
    a[i++]=n;
  }
  for(j=0;j<i;j++)
  cout<<a[j]<<endl;
  return 0;
}
Time Taken: 1.004222 seconds

2 个答案:

答案 0 :(得分:0)

scanf和printf在处理方面是非常昂贵的功能。他们必须解释格式字符串(你写的地方&#34;%d&#34;可能有各种各样的复杂格式占位符)。到目前为止,另一个解决方案可能已经完成了它的处理。 scanf函数的源代码是几百行代码,printf也是。

另一方面,在最佳解决方案中,编译器已经知道预期的类型,并且必须处理在运行时完成的更少的计算,因此从输入字符串到整数的转换(反之亦然)更有效

答案 1 :(得分:0)

还没有测试过,但你的输出包含两倍于控制台的输出。

对于每个数字“最佳解决方案”打印,您也添加\n 更多字符=处理stdout缓冲区的时间更长。