硬币-文件读取方法中的SPOJ TLE

标签 c while-loop scanf eof

在没有Maps帮助的情况下通过Memoization解决问题,由于读取文件的方法,我得到了TLE,根据我的说法,这不应该是这种情况。可能的原因是什么?

这是给出 AC - http://ideone.com/OX1XlD 的代码

在上面的代码中,对于扫描n,如果将while(scanf("%lld",&n)!=EOF)替换为

         scanf("%lld",&n)
         while(n!=EOF){ do something

                scanf("%lld",&n);
          } 

同样给出了 TLE。我不明白为什么。

最佳答案

我没有检查链接中的代码,但从问题中的代码来看,如果 while(scanf("%lld",&n)!=EOF),你是检查 scanf() 本身的返回值。

OTOH,说

   scanf("%lld",&n)
     while(n!=EOF){

您正在检查 n 的值,这是一个完全不同的情况,如果 scanf() 失败,则为 undefined behaviour ,如果 n 没有提前初始化。

正确且首选的方法感谢风向标先生将检查scanf()中的项目数量,例如

if (1 != scanf("%lld",&n))

或者,

while ( 1 == scanf("%lld",&n))  //as in this case

EOF 是一种特殊情况,通常很少见。

关于硬币-文件读取方法中的SPOJ TLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31545718/

相关文章:

c - 如何在两个应用程序之间共享一个共享库(*.so)实例

python - Project Euler #29 替代解决方案

java - 类似的 while 循环和 do while 循环之间的输出差异?

c - while 循环的使用

c - scanf 与 ^ 运算符

c - 将地址传递给 C 中的函数

c++ - 在 C/C++ 中创建 Windows 服务的任何示例? (无图形用户界面)

python - 如何仅使用以下三种选择之一使用(while)和(try)语句来处理用户输入的错误

c - 使用 scanf 检查输入参数

c - 如何从 AT CMGL 响应中检索电话号码?