我一直试图用C ++解决这个简单的问题,但是每次提交时,它都会给出错误的答案。我很确定我的逻辑正确。任何帮助表示赞赏。
问题:找到输入数字之间的距离之和。
例如输入:2 5 8 2 1
距离= 2 + 2 + 5 + 0 = 9,(1PS:输入不能连续使用相同的数字。
PSS:子任务2给出错误答案
代码:
#include <iostream>
using namespace std;
int main() {
// your code goes here
int t,a[100000],n,sum=0;
cin>>t;
for(int i=0;i<t;i++)
{
cin>>n;
for(int j=0;j<n;j++)
{
cin>>a[j];
}
for(int j=0;j<n-1;j++)
{
if(a[j]!=a[j+1])
{
sum = sum + abs(a[j]-a[j+1])-1;
}
}
cout<<sum<<endl;
sum=0;
}
}
答案 0 :(得分:1)
您的代码存在问题,就是您为int
使用了sum
类型,其最大值(1E11
)可能超过了int
的上限(如果是32位以内)。使用long long
(至少64位)代替来存储您的总和。
那么,您也可以优化代码,因为您并不需要一个100000
整数数组并将值存储在其中。您可以只使用两个变量。
这是您逻辑的修改后的实现:
#include <iostream>
int main() {
int t, n, first, second;
long long sum; // or better use std::int_fast64_t sum;
std::cin >> t;
while (t--) {
sum = 0;
std::cin >> n >> first;
for (int i = 0; i < n - 1; ++i) {
std::cin >> second;
sum += std::abs(first - second) - 1;
first = second;
}
std::cout << sum << std::endl;
}
}
PS:在竞争性编码中,检查诸如if(a[j]!=a[j+1])
之类的约束是没有用的。问题声明只是保证它永远不会false
。