簡體   English   中英

C 程序找到最接近10的integer

[英]C program to find integer closest to 10

我正在編寫一個程序,它將接受任意數量的整數。 輸入終端0后,程序將結束。 然后它將是 output 最接近10的數字(終端字符除外)。 如果有幾個數字最接近10 ,那么最后輸入的數字應該是 output。

我當前的代碼確實從輸入 stream 中讀取了數字,但我不知道如何實現邏輯以便程序給我最接近10的數字。

我知道,我需要以某種方式跟蹤最小值以更新最終結果。

#include <stdio.h>

int main() {
    int n = 1;
    int number = 1;
    int numberArray[n];
    int resultArray[n];
    int min;
    int absMin;
    int result;
    int finalResult;

    while (number != 0) {
        scanf("%d", &number);
        numberArray[n] = number;
        n++;
    }
    for (int i = 0; i < n; i++) {
        min = 10 - numberArray[i];
        if (min < 0) {
            absMin = -min;
        }
        else {
            absMin = min;
        }
        resultArray[i] = absMin;
        result = resultArray[0];
        if (resultArray[i] < result) {
            finalResult = resultArray[i];
        }
    }
    printf("%d\n", finalResult);
    return 0;
}

我改進了您的腳本並解決了一些問題:

#include <stdio.h>
#include <math.h>
#include <limits.h>

int main()
{
    int n;
    int number;
    int numberArray[n];
    while (scanf("%d", &number) && number != 0) {
        numberArray[n++] = number;
    }
    
    int currentNumber;
    int distance;
    int result;
    int resultIndex;
    int min = INT_MAX; // +2147483647
    for (int i = 0; i < n; i++) {
        currentNumber = numberArray[i];
        distance = fabs(10 - currentNumber);
        printf("i: %d, number: %d, distance: %d\n", i, currentNumber, distance);
        
        // the operator: '<=' will make sure that it will update even if we already have 10 as result
        if (distance <= min) {
            min = distance;
            result = currentNumber;
            resultIndex = i;
        }
    }
    
    printf("The number that is closest to 10 is: %d. It is the digit nr: %d digit read from the input stream.\n", result, resultIndex + 1);
    return 0;
}

從輸入 stream 讀取:
我們可以在 while 循環中使用scanf以使其更緊湊。 此外,它會減少一次循環,因為我們不是以number = 1開始,它只是一個占位符——這不是輸入——我們不想循環遍歷該步驟。

我使用簡寫符號n++它是后增量運算符。 語句執行后,運算符會將變量加一( numberArray條目將設置為number ,之后n將增加)。 在這種情況下,它的作用與在新行上寫入n++相同。

變量:
我們不需要那么多。 有趣的數字是結果和當前最小值。 當然,我們還需要一個包含輸入的數組。 這幾乎就是我們所需要的——rest 只是輔助變量。

迭代輸入 stream:
為了得到結果,我們可以計算每個條目與 10 的絕對距離。 然后我們檢查距離是否小於當前最小值。 如果它更小(接近 10),那么我們將更新最小值,距離將是新的最小值並且我也添加了resultIndex (以查看哪個輸入是最好的)。 如果我們有多個具有相同距離的數字,運算符<=將確保選擇后一個。

我從 integer 范圍上限的最小值開始。 所以這是數字與結果的最遠距離(無論如何我們只看絕對數字值所以帶符號的數字無關緊要)。

差不多就是這樣。

這是我寫的一個簡單的代碼

我必須說的一件事是你不能簡單地聲明一個大小未知的數組,而這就是你所做的。 即使沒有。 元素的數量可能會有所不同,您要么從用戶那里輸入元素的數量,要么(如下所示)根據您的需要創建一個包含 100 個元素或其他元素的數組。

#include <stdio.h>
#define _CRT_NO_WARNINGS

int main() {
    int n = 0;
    int number = 1;
    int numberArray[100];
    int resultArray[100];
    int minNumber;
    int *min;

    do {
        scanf("%d", &number);
        numberArray[n] = number;
        n++;
    }
    while (number != 0);

    resultArray[0] = 0;
    min = &resultArray[0];
    minNumber = numberArray[0];

    for (int i = 0; i < n-1; i++) {
        if(numberArray[i]>=10){
            resultArray[i] = numberArray[i] - 10;
        }
        if(numberArray[i]<10){
            resultArray[i] = 10 - numberArray[i];
        }

        if(resultArray[i] <= *min){
            min = &resultArray[i];
            minNumber = numberArray[i];
        }
    }

    printf("\n%d",minNumber);
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM