|
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
谢谢
本帖最后由 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;
}
}
...
|