鱼C论坛

 找回密码
 立即注册
查看: 1114|回复: 1

[已解决]请问这个代码哪里错了,谢谢

[复制链接]
发表于 2019-8-31 20:50:46 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 dt3tc 于 2019-8-31 21:42 编辑

题目描述
   
第一行输入两个整数n,m(0<n,m<=1000),分别代表第一个集合和第二个集合的元素的数量。
  
第二行输入n个整数,表示第一个集合中的元素,元素之间用空格隔开。
  
第三行输入m个整数,表示第二个集合中的元素,元素之间用空格隔开。

  两个集合中的元素范围在[0,100000]区间内,集合中不存在重复元素。
输入
第一行,两个整数n,m。
第二行,n个整数,表示序列中的元素。
第三行,m个整数,表示序列中的元素。
输出
一行,从小到大输出交集,保证存在交集。

样例输入

2 3
1 3
1 2 3

样例输出

1 3

提示



我的答案:
main.c
#include <stdio.h>
#include <stdlib.h>
//#define DEBUG1
#define DEBUG2


int main(void)
{
    int x=0,y=0;
#include "debug1.h"
    int m=0,n=0;
    scanf("%d %d",&m,&n);
#include "debug1.h"
    int a[m];
    int z=0;
    for(int c=0;c<m;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)a[c]=z;
    }
#include "debug1.h"
    int b[n];
    for(int c=0;c<n;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)b[c]=z;
    }
#include "debug1.h"
    typedef struct number Num;
#include "debug1.h"
    struct number{
        Num* previous;
        int value;
        Num* next;
    };
#include "debug1.h"
    Num* first=(Num*)malloc(sizeof(Num));
    Num* current=first;
#include "debug1.h"
    for(int d=0;d<m;d++){
        for(int e=0,f=0;e<n;e++){
            if(a[d]==b[e]){
                printf("%d ",a[d]);
                current->value=a[d];
                current->next=(Num*)malloc(sizeof(Num));
                current=current->next;
                current->next=NULL;
            }
        }
    } 
#include "debug1.h"
    Num* last=current;
    last->next=NULL;
#include "debug1.h"
    int g=0;
    for(current=first;current!=last;current=current->next){
        if(current->value>(current->next)->value){
            g=(current->next)->value;
            (current->next)->value=current->value;
            current->value=g;
            }
#include "debug2.h"
    }
#include "debug1.h"
    for(current=first;;current=current->next){
        printf("%d",current->value);
        free(current->previous);
        if(current==last)break;
    }
    return 0;
}
debug1.h
#ifdef DEBUG1
x++;
printf("x==%d\n",x);
#endif
debug2.h
#ifdef DEBUG2
y++;
printf("y==%d\n",y);
#endif
makefile
all:main.exe
main.exe:main.c debug1.h debug2.h
        gcc -o main.exe main.c
每次关闭DEBUG1宏运行就报错Aborted (核心已转储)
打开它就没事

编译器是msys2 软件源中的 gcc 7.4.0
操作系统 win10 64bit

谢谢
最佳答案
2019-8-31 20:50:47
本帖最后由 superbe 于 2019-9-1 12:40 编辑

#include <stdio.h>
#include <stdlib.h>
//#define DEBUG1
#define DEBUG2


int main(void)
{
    int x=0,y=0;
#include "debug1.h"
    int m=0,n=0;
    scanf("%d %d",&m,&n);
#include "debug1.h"
    int a[m];
    int z=0;
    for(int c=0;c<m;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)a[c]=z;
    }
#include "debug1.h"
    int b[n];
    for(int c=0;c<n;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)b[c]=z;
    }
#include "debug1.h"
    typedef struct number Num;
#include "debug1.h"
    struct number{
        Num* previous;
        int value;
        Num* next;
    };
#include "debug1.h"
    Num* first=(Num*)malloc(sizeof(Num));
    Num* current=first;
#include "debug1.h"
    for(int d=0;d<m;d++){
        for(int e=0,f=0;e<n;e++){
            if(a[d]==b[e]){
                printf("%d ",a[d]);
                current->value=a[d];
                current->next=(Num*)malloc(sizeof(Num));
                current->next->previous=current;    //原代码缺少这一行,previous没有初始化
                current=current->next;
                current->next=NULL;
            }
        }
    }
    printf("\n");
#include "debug1.h"
    Num* last=current->previous;    //上面循环完成后,最后一个Num是多余的,所以回退一个
    last->next=NULL;
#include "debug1.h"
    int g=0;
    for(current=first;current!=last;current=current->next){    //如果不回退,这里排序可能会将最后一个无效Num也包括在内
        if(current->value>(current->next)->value){
            g=(current->next)->value;
            (current->next)->value=current->value;
            current->value=g;
            }
#include "debug2.h"
    }
#include "debug1.h"
    for(current=first;;current=current->next){
        printf("%d ",current->value);
        //free(current->previous);    //原代码因为previous没有初始化,所以这里可能出问题,改成下面一行
        if(current!=first) free(current->previous);    //第1个Num没有previous所以判断一下
        if(current==last)break;
    }
    free(current);    //最后一个Num没有释放,单独释放一下
    return 0;
}

最佳答案

查看完整内容

#include #include //#define DEBUG1 #define DEBUG2 int main(void) { int x=0,y=0; #include "debug1.h" int m=0,n=0; scanf("%d %d",&m,&n); #include "debug1.h" int a[m]; int z=0; for(int c=0;c0&&zprevious=current; //原代码缺少这一行,previous没有初始化 current=current->next; current->next=NULL; } } ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-31 20:50:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-9-1 12:40 编辑

#include <stdio.h>
#include <stdlib.h>
//#define DEBUG1
#define DEBUG2


int main(void)
{
    int x=0,y=0;
#include "debug1.h"
    int m=0,n=0;
    scanf("%d %d",&m,&n);
#include "debug1.h"
    int a[m];
    int z=0;
    for(int c=0;c<m;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)a[c]=z;
    }
#include "debug1.h"
    int b[n];
    for(int c=0;c<n;c++){
        scanf("%d%*c",&z);
        if(z>0&&z<100000)b[c]=z;
    }
#include "debug1.h"
    typedef struct number Num;
#include "debug1.h"
    struct number{
        Num* previous;
        int value;
        Num* next;
    };
#include "debug1.h"
    Num* first=(Num*)malloc(sizeof(Num));
    Num* current=first;
#include "debug1.h"
    for(int d=0;d<m;d++){
        for(int e=0,f=0;e<n;e++){
            if(a[d]==b[e]){
                printf("%d ",a[d]);
                current->value=a[d];
                current->next=(Num*)malloc(sizeof(Num));
                current->next->previous=current;    //原代码缺少这一行,previous没有初始化
                current=current->next;
                current->next=NULL;
            }
        }
    }
    printf("\n");
#include "debug1.h"
    Num* last=current->previous;    //上面循环完成后,最后一个Num是多余的,所以回退一个
    last->next=NULL;
#include "debug1.h"
    int g=0;
    for(current=first;current!=last;current=current->next){    //如果不回退,这里排序可能会将最后一个无效Num也包括在内
        if(current->value>(current->next)->value){
            g=(current->next)->value;
            (current->next)->value=current->value;
            current->value=g;
            }
#include "debug2.h"
    }
#include "debug1.h"
    for(current=first;;current=current->next){
        printf("%d ",current->value);
        //free(current->previous);    //原代码因为previous没有初始化,所以这里可能出问题,改成下面一行
        if(current!=first) free(current->previous);    //第1个Num没有previous所以判断一下
        if(current==last)break;
    }
    free(current);    //最后一个Num没有释放,单独释放一下
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-20 23:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表