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

标签 c++ algorithm compare

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

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

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

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

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

最佳答案

scanf 和 printf 在处理方面是极其昂贵的函数。他们必须解释格式字符串(你写“%d”的地方可能有各种各样的复杂格式占位符)。当仅此一项完成时,其他解决方案可能已经完成了处理。 scanf函数的源代码有几百行代码,printf也是。

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

关于c++ - 比较具有相同逻辑的2个源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39904242/

相关文章:

c++ - “bzero”未在此范围内声明

python - 比较两个文件的代码很慢 - 搜索以改进我的代码

将 "if between"与按位运算符而不是逻辑运算符进行比较

algorithm - Matlab 中的障碍函数

algorithm - 了解给定代码的时间复杂度

javascript - 使用 JavaScript 比较两个日期

c++ - Windows SetThreadAffinityMask 无效

c++ - 在 Visual "Microsoft studio 2019"上设置 OpenCV 4.1.1 有问题吗? (非法指令。)

c++ - 我需要遍历一个结构

javascript - 有没有办法重新格式化方程式以从公式中获取未知变量?