| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 473 人关注过本帖
标题:onlinejudge确实让人纠结,明明本地运行无错,传上去就是WA,为什么?
只看楼主 加入收藏
devilboy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-8-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
onlinejudge确实让人纠结,明明本地运行无错,传上去就是WA,为什么?
大家好,实不相瞒,本人菜鸟,目前在做课设,今天做了一个求交集的题,本地调试了好多遍,认为没问题了,就上传到onlinejudge系统,结果提示wrong answer,麻烦各位高手帮忙看看,谢啦!以下是代码:
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int n,i,j,k,a=0,b=0,c=0;
    int *p,*q,*m;
    while(scanf("%d",&n)&&n!=0)
    {
        p=(int *)malloc(n*sizeof(int));
        q=(int *)malloc(n*sizeof(int));
        m=(int *)malloc(n*sizeof(int));
        for(i=0;i<n;i++)
            scanf("%d",&p[i]);
        for(i=0;i<n;i++)
            scanf("%d",&q[i]);
        j=p[0];
        k=q[0];
        while(1)
        {
            if(j==k)
            {
                m[c]=j;
                c++;
                if(++a>n)
                    break;
                if(++b>n)
                    break;
                j=p[a];
                k=q[b];
            }
            else
                if(j>k)
                {
                    if(++b>n)
                        break;
                    k=q[b];
                }
                else
                {
                    if(++a>n)
                        break;
                    j=p[a];
                }
        };
    }
        printf("%d",c);
        for(i=0;i<c;i++)
            printf(" %d",m[i]);
        free(p);
        free(q);
        free(m);
    return 0;
}

搜索更多相关主题的帖子: color 
2011-08-31 15:26
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:10 
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int n,i,j,k,a=0,b=0,c=0;
    int *p,*q,*m;
    while(scanf("%d",&n)&&n!=0)            //这里为什么要用一个while循环呢,用if就可以了嘛。另外可不可以输出一点提示呀
    {
        p=(int *)malloc(n*sizeof(int));
        q=(int *)malloc(n*sizeof(int));
        m=(int *)malloc(n*sizeof(int));
        for(i=0;i<n;i++)
            scanf("%d",&p[i]);              //这里也没提示,不知道要干啥
        for(i=0;i<n;i++)
            scanf("%d",&q[i]);               //同上
        j=p[0];
        k=q[0];
        while(1)
        {
            if(j==k)
            {
                m[c]=j;
                c++;
                if(++a>n)           //这里好像有点问题,++a=n就应该退出了,不然a=n后,下面又j=p[a]。其它几个同样。
                    break;
                if(++b>n)
                    break;
                j=p[a];
                k=q[b];
            }
            else
                if(j>k)
                {
                    if(++b>n)
                        break;
                    k=q[b];
                }
                else
                {
                    if(++a>n)
                        break;
                    j=p[a];
                }
        };
    }
        printf("%d",c);
        for(i=0;i<c;i++)
            printf(" %d",m[i]);
        free(p);
        free(q);
        free(m);
    return 0;
}

另外一个最大的问题是你的算法本身就不正确,
如输入n=3
然后两个集合为 {14, 11, 13}  {11,12,14}
这样只会有一个相同的数14被输出。
好像你没有要求两个集合是排好序的吧!
2011-08-31 18:14
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
明明并查集的算法也能写成这样。。。
2011-08-31 18:35
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
收藏
得分:5 
你是用的哪个judge?
我用北师大的测试结果是Runtime Error。
------------------------------
不必太拘泥与这个,裁判程序也是人写的,不可能面面俱到。

一个单片机就让我头疼不已~~~
2011-08-31 18:36
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:5 
wxjeacen
107821
1045
Accepted
G++
1368 ms
1328 KB
1870 Bytes
2011-08-31 19:49:04


pass
2011-08-31 19:50
devilboy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-8-31
收藏
得分:0 
回复 2楼 czsbc
不好意思,忘了说明了,这是一个求交集的小程序,while(scanf("%d",&n)&&n!=0)这里是设置的一个判断,遇0的时候停止输入;scanf("%d",&p[i])这是用来录入数据的,两数组的数分别存入p[]和q[];下面的if语句是用来求交集的,谢谢啦!
2011-08-31 21:14
devilboy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-8-31
收藏
得分:0 
回复 4楼 dreamofgod
...这是我们自己学校不知从哪里弄来的judge系统,Unix平台,GCC编译环境
2011-08-31 21:18
devilboy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-8-31
收藏
得分:0 
...那个,谢谢大家了,这个问题已经解决了,就是把while语句的花括号改一下位置,由 printf("%d",c);前改到了free(m);后,然后就解决了。
2011-08-31 21:21
快速回复:onlinejudge确实让人纠结,明明本地运行无错,传上去就是WA,为什么?
数据加载中...
 
   



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

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