无法计算-ve数的总和

时间:2015-09-21 15:00:56

标签: c++

我编写了以下程序,用于查找产生相等金额的对的数量。该程序对于正数而言工作得很好但是当涉及到-ve数时它会显示0对。

请告诉我哪里出错了。

#include<iostream>
#include<cstdio>
#include<cmath>
// Include headers as needed
using namespace std;

int main()
{
    // Write your code here
    int t,a,b;
    cin>>t;
    while(t--){
        cin>>a>>b;
        int *x,*y,count=0;
        int c[a];
        for(int i=0;i<a;i++) cin>>c[i];

        x=&c[0],y=&c[a-1];

        while(*x!=*y){
            if((*x+*y)==b) {count++; *(x++),*(y--);}
            else if((*x+*y)>b) {*(y--);}
            else if((*x+*y)<b) {*(x++);}
        }
        if(b%2==0)
        cout<<count/2<<endl;
        else cout<<count/2<<endl;
    }
    // Return 0 to indicate normal termination
    return 0;
}

以下是我正在尝试的输入

1
10 -99
-100000 -500 -100 -50 -25 -10 -5 0 1 2 

输出为0

1 个答案:

答案 0 :(得分:0)

实际上,我坚持了下来。

    while(*x!=*y){
        if((*x+*y)==b) {count++; *(x++),*(y--);}
        else if((*x+*y)>b) {*(y--);}
        else if((*x+*y)<b) {*(x++);}
    }
  1. 如果左右数字总和为-99,则增加count,并向左和向右移动指针&#34;向内&#34; (并取消引用它们,这是一个无操作)。

  2. 如果总和大于-99,则向右(向左)移动右指针(并取消引用,见上文)。

  3. 如果总和小于-99,则向左(向右)移动左指针(并取消引用,见上文)。

  4. 让我们看看会发生什么:

    -100000 + 2 = -99998。案例3,左指针移位。

    -500 + 2 = -498。案例3,左指针移位。

    -100 + 2 = -98。情况2,右指针移位。

    -100 + 1 = -99。情况1,两个指针移位,count现在是1

    -50 + 0 = -50。情况2,右指针移位。

    -50 + -5 = -55。情况2,右指针移位。

    -50 + -10 = -60。情况2,右指针移位。

    -50 + -25 = -75。情况2,右指针移位。

    指针相等,循环结束,count仍为1

    由于if / else的两个部分相等(呵呵?),现在打印count/2,这是一个整数除法,因此舍入为0

    如果您打算发生其他事情,我不会知道,因为您没有用您的意图评论您的代码。所以我们所拥有的只是代码,如上所述。 (正如一些调试输出可能告诉你的那样)。