| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 513 人关注过本帖
标题:新手,程序结果是对的,但不理解为什么会超时,师兄给的答案看不懂
只看楼主 加入收藏
肖逸凡
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-10-23
结帖率:0
收藏
已结贴  问题点数:15 回复次数:4 
新手,程序结果是对的,但不理解为什么会超时,师兄给的答案看不懂
输入包含多组数据,每组数据第一行为一个数字n,表示有n个字符(保证没有空格)。接下来一行n个字符。

Output
输出所有字符的ASCII码之和

Sample Input
5 ABCDE
Sample Output
335
我的答案(超时的,就是不知道为什么
#include<stdio.h>
int main()

{
int num,total,i;
char ch;

while(scanf("%d",&num)!=EOF)
{
    i=0;
    total=0;
    getchar;

    do
    {
        ch=getchar();
        total+=ch;
        i++;
    }
    while (i!=num);
printf("%d\n",total);
}

   
return 0;
}
师兄的正确答案(accepted)
#include<stdio.h>

int main()
{
int total,i;
int n;
char c;
while(scanf("%d",&n)!=EOF)
{
getchar();
total=0;
while(n--)
{
scanf("%c",&c);
{
total+=c;
}
}
printf("%d\n",total);
}
return 0;
}


怎么办?我不理解,看不明白。求大侠相助,
搜索更多相关主题的帖子: include 
2013-10-23 00:17
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:4 
#include<stdio.h>
int main(void)

{
int num,total=0,i=0;
char ch;

scanf("%d",&num);
getchar();

    do
    {
        ch=getchar();
        total+=ch;
    }
    while (--num);
printf("%d\n",total);

return 0;
}
2013-10-23 08:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
为什么总有人喜欢写 scanf(……)!=EOF,到底是谁教的?
就拿
int num;
if( scanf("%d",&num)!=EOF )
    printf( "%d\n", num );
而言,你输入一个A试试,其返回值为0,而不是EOF。

第二,getchar; 是什么意思呢?你没有自己测试过吗?比如运行你的程序,你输入 1 A 试试,看看结果是不是正确。

程序代码:
#include <stdio.h>

int main()
{
    unsigned n;
    while( scanf("%u ",&n) == 1 )
    {
        unsigned s = 0;
        while( n-- )
            s += getchar();
        printf( "%u\n", s );
    }

    return 0;
}

2013-10-23 08:46
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:4 
回复 3楼 rjsp
就是啊 从哪学的
2013-10-23 11:33
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:4 
scanf() != EOF 这可以说是玩ACM的标准判断(PS:国内多此,国外则多为单一数据,不需要这样判断)。关于这一用法看看ACM网站的FAQ都会提到。

再次澄清一个概念,scanf接收的是标准输入流的数据,虽然大多数情况下标准输入为键盘,但并不限于此。对于ACM的JUGER它将标准输入流重定向到了输入数据文件。

楼主的问题,应该出在没有考虑 n = 0情况。

这个问题让我写则会是这样。在这里不能用工程的眼光来看ACM代码,它们追求的目的不同。

程序代码:
#include <stdio.h>
int main()
{
    int n, s;
    for(; scanf("%d", &n) != EOF; printf("%d\n", s))
    for(getchar(), s = 0; n--; s += getchar());
    return 0;
}

重剑无锋,大巧不工
2013-10-23 12:35
快速回复:新手,程序结果是对的,但不理解为什么会超时,师兄给的答案看不懂
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042575 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved