dt3tc 发表于 2019-8-31 20:50:46

请问这个代码哪里错了,谢谢

本帖最后由 dt3tc 于 2019-8-31 21:42 编辑

题目描述
   
第一行输入两个整数n,m(0<n,m<=1000),分别代表第一个集合和第二个集合的元素的数量。

第二行输入n个整数,表示第一个集合中的元素,元素之间用空格隔开。

第三行输入m个整数,表示第二个集合中的元素,元素之间用空格隔开。

两个集合中的元素范围在区间内,集合中不存在重复元素。
输入
第一行,两个整数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;
    int z=0;
    for(int c=0;c<m;c++){
      scanf("%d%*c",&z);
      if(z>0&&z<100000)a=z;
    }
#include "debug1.h"
    int b;
    for(int c=0;c<n;c++){
      scanf("%d%*c",&z);
      if(z>0&&z<100000)b=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==b){
                printf("%d ",a);
                current->value=a;
                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

谢谢

superbe 发表于 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;
    int z=0;
    for(int c=0;c<m;c++){
      scanf("%d%*c",&z);
      if(z>0&&z<100000)a=z;
    }
#include "debug1.h"
    int b;
    for(int c=0;c<n;c++){
      scanf("%d%*c",&z);
      if(z>0&&z<100000)b=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==b){
                printf("%d ",a);
                current->value=a;
                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;
}
页: [1]
查看完整版本: 请问这个代码哪里错了,谢谢