为什么给定的代码不适用于所有测试用例?为什么当输入为 7786 时它不起作用?

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

本文关键字:为什么 输入 7786 不起作用 代码 不适用 适用于 测试用例      更新时间:2023-10-16
#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;
}

原题:
战俘之力 |偶数

给定一个整数 N,您的任务是找到前 N 个自然数的平方和。

例子:

输入 : 3
输出 : 56 2 2+4 2 + 62 =56

输入 : 8
输出 : 816
2 2 + 4 2 + 6 2 + 8 2 + 10 2 + 12 2+14 2 + 162

输入:
输入的第一行包含一个整数 T,表示测试用例的数量。然后是 T 测试用例。每个测试用例的唯一行包含一个整数 N。

输出:
对于每个测试用例,在新行上输出所需的 anser。 约束:

1<=T<=100
N<=104

例: 输入:

3
2
5
9

输出:

20
220
1140
**ERROR:**
Wrong Answer. !!!Wrong Answer

可能您的代码无法在多个测试用例 (TC( 中正常工作。

代码失败的第一个测试用例:

输入:

7786

其正确输出为:

629456320324

代码的输出为:

-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
}

这是一个演示。

对总和使用更大的无符号整数类型(使用有符号整数类型没有意义(,只需编写一个单独的函数来计算总和。

下面是一个演示程序,展示了如何编写函数。

#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;
}

程序输出为

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

请注意,在诸如此类的情况下使用循环也是没有意义的

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

因为循环有许多冗余迭代。

#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;
}