我的代码中的逻辑错在哪里?

Dum*_*ead 7 c arrays algorithm

请原谅我的英语.

我正在上C的入门课程,我的程序逻辑存在一些问题.它有时只会产生所需的输出.

任务是编写一个获取数组元素的函数,返回元素中最大的偶数位.

int ary1[] = {123, 456, -7890, 12};将返回-78908最大偶数位及其出现的最大值.
int ary2[5] = {-123, 654, 78, 15, 189};将返回1898最大偶数位及其出现的最大值.
int ary3[2] = {9, 9};什么都不会回来.
int ary4[] = {123, 123, 0, 12};将返回1232最大偶数位及其出现的最大值.
int ary5[] = {24, 45, -789, 24, 1};将返回-7898最大偶数位及其出现的最大值.
int ary6[] = {-749, -241, 1, 45};将返回454最大偶数位及其出现的最大值.

这是我的代码:

#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");

}
Run Code Online (Sandbox Code Playgroud)

我知道我的逻辑中存在一个错误,因为ary2[]它会产生偶数位,6并且它应该出现8,但我不知道在哪里.

该函数适用于具有奇数值的数组作为其元素.

哪里或我做错了什么?

谢谢.

aut*_*tic 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;
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,循环遍历数组,就像找到最大值一样,但让返回值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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我意识到我做了相反的事情.我首先找到了最大的绝对值,然后找到了该值的最大偶数.正如其他人所说,我应该找到最大的偶数,然后将其与数组中最大的int相关联. (2认同)