沉迷摸鱼无法自拔 2022-05-18 00:00 采纳率: 70.6%
浏览 50
已结题

请问这种问题如何解决

问题遇到的现象和发生背景

编一C程序,它能读入两组整数(每组整数都以-9999为结束标记,个数都不大于1000),并以从小到大的次序输出既在第一组整数中也在第二组整数中的所有整数(同一个整数不能输出两次)。(输入时,两个相邻的整数用空格隔开)。

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>

#define MAX_SIZE 1000
#define END -9999
int n, m;
int arrayN[MAX_SIZE], arrayM[MAX_SIZE];
int res[MAX_SIZE], index;
int cmp(const void *a, const void *b)
{
    return *(const int*)a - *(const int*)b;
}
void GetAns()
{
    int p1, p2;
    qsort(arrayN, n, sizeof(arrayN[0]), cmp);
    qsort(arrayM, m, sizeof(arrayM[0]), cmp);

    for (p1 = p2 = index = 0; p1 < n&&p2 < m;)
    {
        if (arrayN[p1] == arrayM[p2])
            res[index++] = arrayN[p1], ++p1, ++p2;
        else
            arrayN[p1] < arrayM[p2] ? ++p1: ++p2;
    }
}
int main()
{
    int x, i;
    printf("请输入第一组整数:");
    for(n=0;scanf_s("%d",&x)&&x!=END;arrayN[n++]=x)
    { }
    printf("请输入第二组整数:");
    for(m=0;scanf_s("%d",&x)&&x!=END;arrayM[m++]=x)
    { }
    GetAns();
    printf("排序结果为:");
    for (i = 0; i < index; printf("%d%c", res[i], "\n"[i + 1 == index]), ++i);
    return 0;
}

运行结果及报错内容

无法正常排序

img

我的解答思路和尝试过的方法
我想要达到的结果

程序运行正确

  • 写回答

4条回答 默认 最新

  • Duang~Lucky.Mr.Li 2022-05-18 09:54
    关注

    同学,你这代码没问题啊,别迷糊啊。
    看清楚题目要求哦,题目要求是:
    “并以从小到大的次序输出既在第一组整数中也在第二组整数中的所有整数(同一个整数不能输出两次)”
    你问题中测试的数据中本来就没有数据可以输出啊,哈哈哈,是不是突然觉得自己好傻啊
    骗我读了好久代码

    代码写的很漂亮,没有问题,
    非要挑毛病的话
    那就是最终的输出格式的问题了,不应该换行的,题目要求是数据之间隔空格就行

    你的代码写的好厉害的样子,特别是for()循环语句用的,贼漂亮,学到了学到了
    还有qsort()函数,用的也很巧妙,好厉害的样子,作为一个小白,很崇拜

    加油加油,一起努力
    如果有帮助的话,麻烦点个赞吧,谢谢奥

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月18日
  • 创建了问题 5月18日

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料