这是我在 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/