代码逻辑有什么问题?

时间:2020-07-10 09:58:47

标签: c++ logic cc

Reference Image

我一直试图用C ++解决这个简单的问题,但是每次提交时,它都会给出错误的答案。我很确定我的逻辑正确。任何帮助表示赞赏。

问题:找到输入数字之间的距离之和。

例如输入:2 5 8 2 1
距离= 2 + 2 + 5 + 0 = 9,(1

PS:输入不能连续使用相同的数字。
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;   
    }
}

1 个答案:

答案 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