gpt4 book ai didi

c - 我的代码逻辑哪里错了?

转载 作者:太空狗 更新时间:2023-10-29 17:09:55 25 4
gpt4 key购买 nike

请原谅我的英语。

我正在学习 C 的入门类(class),但我的程序逻辑存在一些问题。它只会有时产生所需的输出。

任务是编写一个函数,它接受数组的元素,返回元素中最大的偶数。

int ary1[] = {123, 456, -7890, 12}; 将返回 -7890 作为 8 的最大值作为最大偶数及其出现次数。
int ary2[5] = {-123, 654, 78, 15, 189}; 将返回 189 作为最大值,8 作为最大偶数及其出现次数。
int ary3[2] = {9, 9}; 不会返回任何东西。
int ary4[] = {123, 123, 0, 12}; 将返回 123 作为最大值,2 作为最大偶数及其事件。
int ary5[] = {24, 45, -789, 24, 1}; 将返回 -789 作为最大值,8 作为最大偶数及其出现次数。
int ary6[] = {-749, -241, 1, 45}; 将返回 45 作为最大值,4 作为最大值偶数及其出现次数。

这是我的代码:

#include <stdio.h>

void digitExtract(int[], int);

int main() {

int ary1[] = { 123, 456, -7890, 12 };
int ary2[5] = { -123, 654, 78, 15, 189 };
int ary3[2] = { 9, 9 };
int ary4[] = { 123, 123, 0, 12 };
int ary5[] = { 24, 45, -789, 24, 1 };
int ary6[] = { -749, -241, 1, 45 };
int ary7[] = { 1, 3, 5 };

printf("\nCalling function in ary1[]:\n");
digitExtract(ary1, 4);
printf("\nCalling function in ary2[]:\n");
digitExtract(ary2, 5);
printf("\nCalling function in ary3[]:\n");
digitExtract(ary3, 2);
printf("\nCalling function in ary4[]:\n");
digitExtract(ary4, 4);
printf("\nCalling function in ary5[]:\n");
digitExtract(ary5, 5);
printf("\nCalling function in ary6[]:\n");
digitExtract(ary6, 4);
printf("\nCalling function in ary7[]:\n");
digitExtract(ary7, 3);
}

void digitExtract(int Array[], int array_size) {

int tempValue;
int x;
int myArr[10] = { 0 };
int evenCount = 0;

int max = Array[0];

for (int i = 1; i < array_size; i++)
{
if (Array[i] < 0) {
Array[i] = -Array[i];
if (Array[i] > max) {
max = Array[i];
}
}

}

tempValue = (max < 0) ? -max : max;

do {
myArr[tempValue % 10]++;
tempValue /= 10;
} while (tempValue != 0);



for (x = 8; x > 0; x -= 2) {
if (myArr[x]>0) {
printf("Displaying from inside of function():\n");
printf("\nThe largest even digit: %d\n", x );
printf("\nThe digit %d occurs %d times.\n", x, myArr[x]);

evenCount++;
break;
}

} if (evenCount == 0)
printf("\nNo even digits found!\n\n");

}

我知道我的逻辑中有一个错误 ary2[] 它会产生 6 的偶数位,而它应该是 8 ,但我不知道在哪里。

该函数适用于元素为奇数的数组。

我在哪里或哪里做错了?

谢谢。

最佳答案

您的任务是找到最大的偶数,然后找到包含该数字的最大值...不是找到最大值,然后找到其中的最大偶数。

我会首先编写一个名为 max_even_digit 的函数来对单个 int 进行操作,然后验证并从那里开始工作。

int max_even_digit(int x) {
int max = 0;
while (x) {
int digit = x % 10;
digit = digit < 0 ? -digit : digit;
if (x % 2 == 0 && digit > max) {
max = digit;
}
x /= 10;
}
return max;
}

完成此操作后,循环遍历数组,就好像要找到最大值一样,但让 max_even_digit 的返回值优先于实际值。

int max_even_digit_value(int *array, size_t size) {
if (size == 0) {
return 0;
}

int max_value = array[0],
max_digit = max_even_digit(max_value);
while (--size) {
int value = array[size],
digit = max_even_digit(value);
if (digit > max_digit || (digit == max_digit && value > max_value)) {
max_value = value;
max_digit = digit;
}
}

return max_value;
}

关于c - 我的代码逻辑哪里错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30340053/

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