返回连续数字的逻辑假设数组包含元素 1,9,2,3,4,9,6,7,8,那么它应该返回 2,3,4,6,7,8

Logic to return continuous numbers lets say array with elements 1,9,2,3,4,9,6,7,8 then it should return 2,3,4,6,7,8?

本文关键字:返回 数字 包含 连续 数组 假设 元素      更新时间:2023-10-16

我的代码在下面,但有一些错误,任何人都可以指导我编写逻辑来返回连续数字,例如,如果array[] = {1,3,5,2,3,4,7,4,5,6}那么函数应该返回2,3,4,4,5,6记住时间复杂度?

#include <stdio.h>
#define max 10
int coll[max];
void call_sort(int* p) {
    int i = 0, first, sec;
    while (*p) {
        first = *p;
        p++;
        sec = *p - 1;
        if (first == sec) {
            coll[i] = *p;
            i++;
        }
        int j;
        for (j = 0; j < max; j++) {
            printf("%d ", coll[j]);
            //coll=coll+1;
        }
    }
}
int main(void) {
    printf("yan");
    int buff[max], i;
    for (i = 0; i < max; i++)
        scanf("%d", buff[i]);
    call_sort(&buff);
}

你的代码有很多问题

  1. 错误的参数要scanf(),需要传递变量的地址才能在里面修改scanf()像这样

    scanf("%d", &buff[i]);
    

    您还应该通过检查其返回值来检查scanf()是否正确读取了该值。

  2. call_sort()参数错误,在这种情况下这不会引起任何问题,但它是错误的,这与scanf()问题相结合,意味着您没有启用编译器警告,您应该。

    通过buff的正确方法很简单

    call_sort(buff);
    
  3. 错误的while (*p)假设0是数组的最后一个元素。

    您可能应该将大小作为参数传递并编写一个for循环,因为您正在处理数字并且0是一个数字,如果它是一个文本字符串,那么可以从正常值中排除0并将其用作哨兵值,这是在字符串的标准库函数中完成的。