【0931】 2023-10-22 19:29 采纳率: 86.4%
浏览 2
已结题

为什么这个c语言程序有错误

img


搞两个指针,一快指针,一个慢指针,删掉重复项,为啥这个不行,删掉有序数组中的重复项

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-22 22:10
    关注

    【以下回答由 GPT 生成】

    问题出在循环中的条件判断部分。在这段代码中,变量i在循环外进行了初始化,并且在循环中没有更新,因此条件判断部分的a[i-1]会使用未被更新的初值,而导致程序运行错误。

    为了修复这个问题,需要修改循环的条件判断部分。具体的修复方法如下:

    1. 在循环开始前,添加一个新的整型变量count用来记录不重复元素的个数,并且将count初始化为1,因为数组的第一个元素不会重复。
    int count = 1;
    
    1. 在循环的条件判断部分,修改为 if (a[count-1] != a[j]),使用count作为索引来访问数组元素。

    2. 在循环的更新部分,将 a[i++] = a[j]; 修改为 a[count++] = a[j];,这样可以保证不重复元素被正确地写入到数组中,并且count的值也会递增。

    3. 最后,循环结束后,还需要将数组的长度更新为不重复元素的个数,以便后续使用。

    修复后的代码如下所示:

    #include <stdio.h>
    
    int main() {
        int a[100];
        int n, j, len, count;
    
        printf("请输入数组个数:\n");
        scanf("%d", &n);
    
        printf("请输入数组:\n");
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
    
        len = sizeof(a) / sizeof(a[0]);
        count = 1;
    
        for (j = 1; j < len; j++) {
            if (a[count - 1] != a[j]) {
                a[count++] = a[j];
            }
        }
    
        len = count;
    
        return 0;
    }
    


    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 已采纳回答 10月23日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
  • ¥15 ansys机翼建模肋参数
  • ¥15 Sumo软件无法运行
  • ¥15 如何在vscode里搭建stata的编辑环境?
  • ¥15 dify知识库创建问题
  • ¥15 如何用C#的chart画1000万个点不卡顿
  • ¥15 爬虫技术找到网上看过房源客户的电话
  • ¥20 代码:Python随机森林反演生物量数据处理问题
  • ¥15 Linux系统的命令行窗口回车变成了换行,无法执行命令了