gpt4 book ai didi

c - 查找重复整数的数组问题

转载 作者:行者123 更新时间:2023-11-30 19:37:22 24 4
gpt4 key购买 nike

我目前正在练习编程(特别是 C 编程),并且我正在尝试一个章节结束问题,其描述如下:

“使用单下标数组解决下面的问题。读入 20 个数字,每个数字在 10 到 100 之间(含 10 和 100)。 读取每个数字时,打印仅当它不是已读取的数字的重复项时才如此。提供“最坏情况”,其中所有 20数字不同。使用尽可能小的数组来解决这个问题”

这是我到目前为止所拥有的:

#include <stdio.h>
#include <stdbool.h> //used this library for the ability to use true and false
#define SIZE 20

bool searchArray(int integer, unsigned int j); //prototype for the searchArray function

int main (void)
{

bool print;
int numbers[20];
unsigned int i;

for (i = 0; i < SIZE; i++)
{
scanf("%d", &numbers[i]);
print = searchArray(numbers[i], i); //receives true or false

if (print == true)
{
printf("\nNumber at element %d: %d\n", i, numbers[i]);
}
else if (print == false)
{
printf("\nThis element has a copy in the array already\n");
}



}

}


bool searchArray(int integer, unsigned int j) //function that helps decide whether or not to print out the integer
{
static int numberscopy[20];
unsigned int n;


numberscopy[j] = integer;

for (n = 0; n < SIZE; n++)
{

if (numberscopy[n] == numberscopy[j] && n != j) // for making sure that the inputted integer is equal to any element that's currently in the array and making sure it's not including the very same integer that was just input on it's first appearance
{
return false;
}
return true;
}

}

说明:我在这个程序中所做的是定义一个名为 searchArray 的函数,该函数基于当前数组元素和数组索引的输入返回一个 boolean 值(true 或 false)。在主函数的 for 循环中,我使用 scanf 一次从用户接收一个整数。这些整数元素中的每一个都被放入称为“numbers”的数组中的数组索引中。

然后,数组元素和程序所在数组的当前索引都被放入 searchArray 函数中。在 searchArray 函数中,每个元素都被输入到函数的本地 20 元素数组中,称为“numberscopy”(其中,在该数组中放入的每个数字基于传递给 searchArray 的 i 的当前值)。然后在 searchArray 函数中,有一个 for 循环,它搜索numberscopy 数组中的所有当前元素,并检查刚刚放入的整数是否已经在numberscopy 数组中。如果找到,则返回“false”。如果不是,则自动返回“true”。

我认为这会起作用,但问题是它似乎只能检测每次运行时输入的第一个整数的重复项。例如,如果先输入数字 25,然后输入 32,然后再次输入 25,然后再次输入 32,当我第二次输入 25 时,它会正确检测到 25 已经在数组中,但对于 32 ,它似乎没有检测到它并在再次放入时打印32。 The example here

有人知道为什么这不像我想象的那样有效吗?

最佳答案

for (n = 0; n < SIZE; n++)
{

if (numberscopy[n] == numberscopy[j] && n != j)
{
return false;
}

}
return true;
}

而不是

for (n = 0; n < SIZE; n++)
{

if (numberscopy[n] == numberscopy[j] && n != j)
{
return false;
}
return true;
}

}

关于c - 查找重复整数的数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com