提问人:Dimitri Mikhalev 提问时间:9/26/2022 更新时间:9/26/2022 访问量:92
如何循环打印出 int 数组中缺少的元素?
how can I make a loop print out missing elements in my int array?
问:
我一直在尝试解决一个作业,其中您:
- 输入整数数组的大小 N
- 输入要用于填充数组的整数的最大值 M
- 在第二个数组中输入值介于 1 和 M 之间的 N 个值。
- 比较这两个并打印出缺失的数字......
喜欢这个:
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;
}
}
}
}
答:
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
尝试试运行它,它们都是省时的。第二个也是内存效率。
评论
0
1
values
table