这是一个非常简单的问题,但不幸的是,我被困住了,不知道该怎么办。我的程序是一个简单的程序,它继续接受3个数字并输出3中最大的数字。程序一直运行直到用户输入一个字符。
正如tittle所说,我的问题是如何让它更快地执行(将有大量的输入数据)。可以使用任何类型的帮助,包括使用不同的算法或使用不同的功能或更改整个代码。
我在C ++ Standard方面经验不足,因此不了解不同库中可用的所有不同功能,所以请解释一下你的理由,如果你太忙,至少试试并提供一个链接。
这是我的代码
#include<stdio.h>
int main()
{
int a,b,c;
while(scanf("%d %d %d",&a,&b,&c))
{
if(a>=b && a>=c)
printf("%d\n",a);
else if(b>=a && b>=c)
printf("%d\n",b);
else
printf("%d\n",c);
}
return 0;
}
它的工作非常简单。 while循环将继续执行,直到用户输入一个字符。正如我之前解释的那样,该程序接受3个数字并输出最大的数字。这个代码没有其他部分,这就是全部。我试图尽可能多地解释它。如果你需要更多的东西,请问,(我会尽可能多地尝试)。
我正在使用CPP 4.9.2在互联网平台上编译(那里的内容是什么)
任何形式的帮助都将受到高度赞赏。提前致谢
输入由计算机完成,因此输入没有延迟。
另外,我会接受c和c ++中的答案。
我还想问一下,是否有任何通用的库函数或算法,或任何其他类型的建议(我们必须要做的事情和我们必须做的事情)才能加速执行(不仅仅是这段代码,但总的来说)。任何帮助,将不胜感激。 (很抱歉在没有提供任何参考资料的情况下提出这样一个尴尬的问题)
答案 0 :(得分:6)
您的&#34;算法&#34;非常简单,我会使用max()
函数编写它,因为它的风格更好。
但无论如何......
最耗费时间的是scanf
。这是你的瓶颈。您应该编写自己的读取函数,该函数使用fread
读取一个巨大的块并对其进行处理。您可以考虑异步执行此操作 - 但我不建议将其作为第一步(某些异步实现确实比同步实现慢)。
所以基本上你做了以下事情:
答案 1 :(得分:1)
除非您保证三个输入数字都不同,否则我担心让程序获得正确的输出。如上所述,除了输入和输出缓冲之外,几乎没有任何东西可以加速,并且可能通过使用自定义解析和格式化代码来加速十进制转换,而不是通用scanf
和{{1 }}
现在,如果您收到输入值a = 5,b = 5,c = 1,您的代码将报告1是这三个值中最大的一个。更改&gt;比较&gt; =来解决这个问题。
您可以通过记住以前的结果来最小化比较次数。你可以这样做:
printf
这恰好进行了两次比较,找到d的值为int d;
if (a >= b)
if (a >= c)
d = a;
else
d = c;
else
if (b >= c)
d = b;
else
d = c;
[then output d as your maximum]
。
您的代码至少使用两个,最多可能使用4.