如何循环打印出 int 数组中缺少的元素?

how can I make a loop print out missing elements in my int array?

提问人:Dimitri Mikhalev 提问时间:9/26/2022 更新时间:9/26/2022 访问量:92

问:

我一直在尝试解决一个作业,其中您:

  1. 输入整数数组的大小 N
  2. 输入要用于填充数组的整数的最大值 M
  3. 在第二个数组中输入值介于 1 和 M 之间的 N 个值。
  4. 比较这两个并打印出缺失的数字......

喜欢这个:

Size of array? 10        // => N = 10
Max value in array? 8    // => M = 8

Please enter 10 values between 1 and 8:
4 1 3 1 7 3 4 4 6 1

Missing values: 2 5 8

出于某种原因,无论我尝试什么,我的 for 循环都会打印出 1 和 M 之间的所有数字......我错过了什么??

法典:

#include <stdio.h>

int main(void)
{
    int aSize, mValue;



    printf("Size of array? ");
    scanf(" %d", &aSize);
    printf("Max value in array: ");
    scanf(" %d", &mValue);

    int table[aSize];
    int values[mValue];

    for (int i = 0; i < aSize; i++)
    {
        table[i] = i+1;
        if ((i+1) > mValue)
        {
            table[i] = 0;
        }
    }

    printf("Please enter %d values between 1 and %d:\n", aSize, mValue);

    for (int i = 0; i < mValue; i++)
    {
        scanf(" %d", &values[i]);
    }

    for(int i = 0; i < aSize; i++)
    {
        for (int j = 0; j < mValue; j++)
        {
            if(table[i] != values[j] && table[i] != 0)
            {
                printf("%d ", table[i]);
                break;
            }
        }
    }
}
数组 C for 循环 整数 比较

评论

0赞 Some programmer dude 9/26/2022
我的方法如下:获取输入;对数组进行排序;循环数组,如果前一个值(初始化为 )与当前值之间的差值大于则缺少一个值;将当前值保存为上一个值;迭代循环。01
1赞 pmg 9/26/2022
您希望数组(当然还有数组)有 N 个元素的空间,而不是代码中的 M 个元素。valuestable

答:

1赞 Prabhand Reddy 9/26/2022 #1
#include <stdio.h>
   int main()
   {
    int aSize, mValue;
    printf("Size of array? ");
    scanf(" %d", &aSize);
    printf("Max value in array: ");
    scanf(" %d", &mValue);

    int table[aSize];
    int values[aSize]; // not 'mSize' because it is just max value not size of array

    for (int i = 0; i < aSize; i++)
    {
        table[i] = i+1;
        if ((i+1) > mValue)
        {
            table[i] = 0;
        }
    }

    printf("Please enter %d values between 1 and %d:\n", aSize, mValue);

    for (int i = 0; i < aSize; i++)
    {
        scanf(" %d", &values[i]);
    }

    for(int i = 0; i < aSize; i++)
    {
        int flag=0;
        for (int j = 0; j < aSize; j++)
        {
            if(table[i] == 0 || table[i] == values[j]) // numbers in common or zero
            {
                flag=1;
                break;
            }
        }
        if(flag == 0) printf("%d",table[i]); // missing numbers
    }
}
0赞 Harshit Rathore 9/26/2022 #2

In this code, I'm creating an extra array to store the occurance of the variable, then printing it. 1 means present 0 means not present.

#include <stdio.h>

int main(void) {
    int aSize, mValue;

    printf("Size of array? ");
    scanf(" %d", &aSize);
    printf("Max value in array: ");
    scanf(" %d", &mValue);

    int table[aSize];
    int values[mValue+1];
    for (int i = 0; i <= mValue; i++)
    {
        values[i]=0;
    }
    values[0]=1;

    printf("Please enter %d values between 1 and %d:\n", aSize, mValue);

    for (int i = 0; i < aSize; i++)
    {
        scanf(" %d", &table[i]);
        if(table[i]>mValue || table[i]<1){
            printf("Enter numbers in given range");
            return 0;
        }
    }

    for(int i = 0; i < aSize; i++)
    {
        values[table[i]]=1;
    }

    printf("Missing values:\n");
    for(int i = 1; i <= mValue; i++)
    {
        if(!values[i])
        printf("%d\n",i);
    }
    return 0;
}

这是上述逻辑的更好版本。

#include <stdio.h>

int main(void) {
    int aSize, mValue;

    printf("Size of array? ");
    scanf(" %d", &aSize);
    printf("Max value in array: ");
    scanf(" %d", &mValue);
    
    int temp;
    int values[mValue+1];
    values[0]=1;

    printf("Please enter %d values between 1 and %d:\n", aSize, mValue);

    for (int i = 0; i < aSize; i++)
    {
        scanf(" %d", &temp);
        if(temp>mValue || temp<1){
            printf("Enter numbers in given range");
            return 0;
        }
        values[temp]=1;
    }
    
    printf("Missing values:\n");
    for(int i = 1; i <= mValue; i++)
    {
        if(!values[i])
        printf("%d\n",i);
    }
    return 0;
}

评论

0赞 Dimitri Mikhalev 9/26/2022
可能是我现在脑子累了,但感觉有点难以理解这个......但我相信这是好事:)
0赞 Harshit Rathore 9/27/2022
尝试试运行它,它们都是省时的。第二个也是内存效率。