我编写了以下程序,用于查找产生相等金额的对的数量。该程序对于正数而言工作得很好但是当涉及到-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
答案 0 :(得分:0)
实际上,我坚持了下来。
while(*x!=*y){
if((*x+*y)==b) {count++; *(x++),*(y--);}
else if((*x+*y)>b) {*(y--);}
else if((*x+*y)<b) {*(x++);}
}
如果左右数字总和为-99
,则增加count
,并向左和向右移动指针&#34;向内&#34; (并取消引用它们,这是一个无操作)。
如果总和大于-99
,则向右(向左)移动右指针(并取消引用,见上文)。
如果总和小于-99
,则向左(向右)移动左指针(并取消引用,见上文)。
让我们看看会发生什么:
-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
。
如果您打算发生其他事情,我不会知道,因为您没有用您的意图评论您的代码。所以我们所拥有的只是代码,如上所述。 (正如一些调试输出可能告诉你的那样)。