| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 354 人关注过本帖
标题:求大牛看看 AC不能= =
只看楼主 加入收藏
呢喃君
Rank: 2
等 级:论坛游民
帖 子:32
专家分:28
注 册:2012-7-5
结帖率:83.33%
收藏
已结贴  问题点数:5 回复次数:3 
求大牛看看 AC不能= =
Input
每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开.
如果n=0并且m=0表示输入的结束,不做处理。
Output
针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.

#include<stdio.h>
#include<stdlib.h>
int main()
{
    void quickSort(int* arr,int startPos, int endPos); //排序
    int n,m,i,j,flag,c,s[101],k;
    int *q;
    int *p;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        k=0;
        c=0;
        if(n==0)
            break;
        q=(int *)malloc(n*sizeof(int));
        p=(int *)malloc(m*sizeof(int));
        for(i=0;i<n;i++)
            scanf("%d",q+i);
        for(i=0;i<m;i++)
            scanf("%d",p+i);
        if(m==0&&n!=0)
        {
            quickSort(q,0,n-1);
            for(i=0;i<n;i++)
                printf("%d ",*(q+i));
            printf("\n");
            continue;
        }
        for(i=0;i<n;i++)
        {
            c++;
            flag=0;
            for(j=0;j<m;j++)
            {
                if(*(q+i)==*(p+j))
                    break;
                else
                    flag++;
            }
            if(flag==m)
            {
                *(s+k++)=*(q+i);
                c--;
            }
        }
        quickSort(s,0,k-1);
        for(i=0;i<k;i++)
            printf("%d ",*(s+i));
        if(c==n)
            printf("NULL");
        free(p);
        free(q);
        printf("\n");
    }
    return 0;
}

void quickSort(int* arr,int startPos, int endPos) //排序
{
int i,j;
int key;
key=arr[startPos];
i=startPos;
j=endPos;
while(i<j)
{
while(arr[j]>=key && i<j)--j;
arr[i]=arr[j];
while(arr[i]<=key && i<j)++i;
arr[j]=arr[i];
}
arr[i]=key;
if(i-1>startPos) quickSort(arr,startPos,i-1);
if(endPos>i+1) quickSort(arr,i+1,endPos);
}
搜索更多相关主题的帖子: 数据 include 元素 
2012-07-30 20:06
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
    while(scanf("%d %d",&n,&m)!=EOF)
     {
         k=0;
         c=0;
         if(n==0)
             break;
 这几句就有问题。

题目要求的结束标志是n、m均等于0。并非n等于0。n == 0 而 m != 0或者反过来,都是有意义的。前者要输出NULL,后者输出所有的n。

这应该是杭电2034题。

重剑无锋,大巧不工
2012-07-30 21:06
呢喃君
Rank: 2
等 级:论坛游民
帖 子:32
专家分:28
注 册:2012-7-5
收藏
得分:0 
回复 2楼 beyondyf
果然是这个问题。。
版主大大厉害= =
难道你也刷过杭电
2012-07-31 17:17
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
嗯,玩过。

重剑无锋,大巧不工
2012-07-31 17:19
快速回复:求大牛看看 AC不能= =
数据加载中...
 
   



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

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