比较两个具有相同逻辑的源代码
Comparing 2 source codes with same logic
这是我在hackerearth上的"Life, the Universe, and Everything"的代码
为什么"我的解决方案"比"最佳解决方案"慢,即使逻辑用的是一样的!
事实上,我认为我的逻辑应该更快,因为我在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("%dn",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也是。
另一方面,在最佳解决方案中,编译器已经知道预期的类型,并且必须在运行时处理更少的计算,因此从输入字符串到整数的转换以及从输入字符串到整数的转换要有效得多。
还没有测试过,但是您的输出包括两倍于控制台的输出。
每打印一个数字"最佳解决方案",你也加一个n
。
更多的字符=更多的时间来处理标准输出缓冲区
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将fold表达式与std::一起用于两个元组
- 如何在C++中比较两个char数组
- C++问题,我的两个源代码应该具有相同的输出,但它们是不同的
- 比较从相同源代码生成的两个可执行文件的校验和
- 比较两个具有相同逻辑的源代码
- 在标头中定义并包含在两个源代码中的结构仅在一个源代码内定义
- 用于比较给定两个源代码文件的同一c++函数的两个版本的工具
- 控制两个直流电机(在arduino上)通过c++源代码