标题:求解整数串处理问题为什么是wrong answer
只看楼主
rainnese
Rank: 1
来 自:广州
等 级:新手上路
帖 子:51
专家分:0
注 册:2016-1-15
结帖率:56.25%
已结贴  问题点数:10 回复次数:7 
求解整数串处理问题为什么是wrong answer
题目如下:
Description
处理一个整数序列,当某数出现第二次,第三次。。时,只保留第一次,其他重复的删除,然后将处理好的序列输出


Input
N个空格分隔的正整数Ai(n<=10000,Ai<=10000),以文件结束终止程序。


Output
一行空格分隔的整数序列


Sample Input
Original Transformed

4 5 6 4 3 1
Sample Output
Original Transformed
4 5 6 3 1
我写的代码是:
程序代码:
#include<stdio.h>
#include<string.h>
int p[10001],q[10001];
int main()
{
    char gh;
    int f,ch=0;
    while (scanf("%d%c", &ch, &gh) != EOF)
    {
        for (int k = 0;k < 10001;k++)
            q[k]=p[k] = 0;
        p[0] = ch;
        q[ch] = ch;
        f = 1;
        int i, j;
        for (i = 1;i < 10001;i++)
        {
            if (gh == '\n')break;
            scanf("%d%c", &ch, &gh);
            if (q[ch] == 0)
            {
                q[ch] = ch;
                p[i] = ch;
                f = i+1;
            }
        }
            for (j = 0;j < f;j++)
            {
                if ((p[j] != 0) && j != f - 1)printf("%d ", p[j]);
                if ((p[j] != 0) && j == f - 1)printf("%d\n", p[j]);
            }
    }
    return 0;
}

答案错,可是我实在想不出哪里出错了,求大神指点,谢谢!

[此贴子已经被作者于2016-1-31 13:48编辑过]

搜索更多相关主题的帖子: 正整数 wrong 
2016-01-31 12:57
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
题目哪里告诉你数据有多行的?

算法本身不错,但被你写的那么繁琐。会你个示例看看有多少不必要的东西。
程序代码:
#include<stdio.h>
int main()
{
    char m[10000] = {0};
    int t;

    scanf("%d", &t), printf("%d", t);
    for(m[t] = 1; scanf("%d", &t) != EOF;)
        if(!m[t]) m[t] = 1, printf(" %d", t);

    return 0;
}

重剑无锋,大巧不工
2016-01-31 16:32
rainnese
Rank: 1
来 自:广州
等 级:新手上路
帖 子:51
专家分:0
注 册:2016-1-15
得分:0 
回复 2楼 beyondyf
每次看你写的东西都能长见识,不过,改了还是错的,为什么啊,想不出还有哪里有问题

计算机专业的大学生
2016-01-31 17:24
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:10 
回复 3楼 rainnese
你提交我的代码错了?把这题地址发上来我去看看

重剑无锋,大巧不工
2016-01-31 17:32
rainnese
Rank: 1
来 自:广州
等 级:新手上路
帖 子:51
专家分:0
注 册:2016-1-15
得分:0 
回复 4楼 beyondyf
这是学校的OJ,http://icpc.ahu.

计算机专业的大学生
2016-01-31 17:37
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
我居然有你们学校的OJ账号,都想不起什么时候注册的了。

我的代码有两处错误。1、m数组的尺寸不对,少了一个元素。2、格式不对,输出最后还要加个换行符,这是看了输出示例的Transformed发现的,坑。

这是AC代码
程序代码:
#include<stdio.h>
int main()

 {
     char m[10001] = {0};
     int t;

 
     scanf("%d", &t), printf("%d", t);
     for(m[t] = 1; scanf("%d", &t) != EOF;)
         if(!m[t]) m[t] = 1, printf(" %d", t);
     puts("");
     return 0;

 }

重剑无锋,大巧不工
2016-01-31 18:02
rainnese
Rank: 1
来 自:广州
等 级:新手上路
帖 子:51
专家分:0
注 册:2016-1-15
得分:0 
回复 6楼 beyondyf
你说的我都改了啊,还是不对

计算机专业的大学生
2016-01-31 18:07
rainnese
Rank: 1
来 自:广州
等 级:新手上路
帖 子:51
专家分:0
注 册:2016-1-15
得分:0 
回复 6楼 beyondyf
我知道错哪了,这换行符太坑

计算机专业的大学生
2016-01-31 18:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-461488-1-1.html




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

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