簡體   English   中英

為什么給定的代碼不適用於所有測試用例?為什么當輸入為 7786 時它不起作用?

[英]why the given code doesn't work for all test cases?Why it doesn't work when input is 7786?

#include <iostream>
#include<math.h>
using namespace std;

int main() {
//code
int t,n,s;
cin>>t;//no. of test cases

for(int k=1;k<=t;k++)
{   cin>>n;s=0;//n:input,s:sum

        for(int i=1;i<=n*2;i++)
        {
            if(i%2==0)
               s=s+(i*i);
        }
    cout<<s<<endl;

}

return 0;
}

原始問題:
戰俘的力量 | 偶數

給定單個 integer N,您的任務是求出前 N 個偶數自然數的平方和。

例子:

輸入:3
Output: 56
2 2 + 4 2 + 6 2 = 56

輸入:8
Output: 816
2 2 + 4 2 + 6 2 + 8 2 + 10 2 + 12 2 + 14 2 + 16 2

輸入:
輸入的第一行包含一個 integer T,表示測試用例的數量。 然后是 T 測試用例。 每個測試用例的唯一行包含一個 integer N。

Output:
對於每個測試用例 output,新行中所需的答案。 約束:

1<=T<=100
N<=104

示例: 輸入:

3
2
5
9

Output:

20
220
1140

**ERROR:**
Wrong Answer. !!!Wrong Answer

可能您的代碼對於多個測試用例 (TC) 無法正常工作。

您的代碼失敗的第一個測試用例:

輸入:

7786

其正確的 output 是:

629456320324

您的代碼 output 是:

-1903872188

您的s數據類型不夠大。 您可以指定您想要一個 64 位 int(應該足夠大):

#include <iostream>

int main()
{
    int n = 7786;
    uint64_t s = 0; // note the type

    for(int i = 1; i <= n*2; ++i)
    {
       if(i%2 == 0)
          s += i*i;
    }
    std::cout << s << std::endl;  // prints 629456320324
}

這是一個演示

對總和使用更大的無符號 integer 類型(使用有符號 integer 類型沒有意義),只需編寫一個單獨的 function 來計算總和。

這是一個演示程序,展示了如何編寫 function。

#include <iostream>

unsigned long long even_square_sum( unsigned int n )
{
    unsigned long long sum = 0;

    for ( unsigned int i = 0; i < n; i++ )
    {
        unsigned long long int even = 2 * ( i + 1 );
        sum += even * even;
    }

    return sum;
}

int main() 
{
    unsigned int n = 2;

    std::cout << n << ": " << even_square_sum( n ) << '\n';

    n = 5;

    std::cout << n << ": " << even_square_sum( n ) << '\n';

    n = 9;

    std::cout << n << ": " << even_square_sum( n ) << '\n';

    n = 7786;

    std::cout << n << ": " << even_square_sum( n ) << '\n';

    return 0;
}

程序 output 是

2: 20
5: 220
9: 1140
7786: 629456320324

請注意,使用具有以下條件的循環也是沒有意義的

for(int i=1;i<=n*2;i++)
            ^^^^^^

因為循環有很多冗余迭代。

int類型沒有足夠的范圍,使用long int或有時你需要long long int

#include <iostream>
#include<math.h>
using namespace std;

int main() {
    //code
    long int t,n,s;//Using long int removed the error
    cin>>t;//no. of test cases

    for(int k=1;k<=t;k++)
    {   cin>>n;s=0;

            for(int i=1;i<=n*2;i++)
            {
                if(i%2!=0)
                   s=s+(i*i);
            }
        cout<<s<<endl;

    }

    return 0;
}

暫無
暫無

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

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