这是我在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
答案 0 :(得分:0)
scanf和printf在处理方面是非常昂贵的功能。他们必须解释格式字符串(你写的地方&#34;%d&#34;可能有各种各样的复杂格式占位符)。到目前为止,另一个解决方案可能已经完成了它的处理。 scanf函数的源代码是几百行代码,printf也是。
另一方面,在最佳解决方案中,编译器已经知道预期的类型,并且必须处理在运行时完成的更少的计算,因此从输入字符串到整数的转换(反之亦然)更有效
答案 1 :(得分:0)
还没有测试过,但你的输出包含两倍于控制台的输出。
对于每个数字“最佳解决方案”打印,您也添加\n
更多字符=处理stdout缓冲区的时间更长。