簡體   English   中英

該代碼在哪里失敗? 兩種方法之間的區別

[英]Where does this code fails? Difference between the 2 approaches

以下是我在編碼站點中使用的代碼。 如果我取消對第一個注釋的注釋,則代碼可以正常工作,但是如果我取消對第二個代碼而不是第一個注釋的注釋,則該代碼將產生錯誤的結果。 我無法弄清楚兩者之間的區別。 兩者在我看來都一樣。 請使用第二種方法幫助我找到失敗的輸入。

    Scanner input = new Scanner(System.in);
    int T = input.nextInt();

    while (T-- > 0) {
        int N = input.nextInt();
        int C = input.nextInt();
        int[] A = new int[N];

        // if I use like this code gets accepted
        // for (int i = 0; i < N; i++) A[i] = input.nextInt();

        int K = 0;

        while (C > 0 && K < N) {

            // if I use like this code produces wrong result
            // A[K] = input.nextInt();
            C -= A[K];
            K++;
        }

        String answer = "";

        if (C < 0 || K < N) answer = "No";
        else answer = "Yes";

        System.out.println(answer);
    }

    input.close();

這是問題的鏈接https://www.codechef.com/problems/LECANDY

在第一種情況下,我首先初始化所有數組元素,然后執行檢查邏輯。

在第二篇文章中,我將初始化並一起使用該值(控件可能會跳出循環,而不必初始化每個元素)

第二種方法是在C <= 0時停止讀取值,這意味着在下一個測試中外循環開始時,您正在讀取所有錯誤的值。

輸入示例:

2

2 1
5 6

3 4
7 8 9

您的代碼將顯示為T = 2

在第一次迭代中,您讀取N = 2, C = 1

使用代碼中的第一種方法,然后讀取A[0] = 5, A[1] = 6 ,因此,當外循環滾動時,您將讀取N = 3, C = 4

但是,使用代碼中的第二種方法,您將讀取A[0] = 5 ,計算C = 1 - 5 = -4並退出內部循環,並保留值6 ,因此當外部循環滾動時,您將讀取N = 6, C = 3 ,那都是錯誤的。

暫無
暫無

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

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