题目描述:
小w与tokitsukaze一起玩3ds上的小游戏,现在他们遇到了难关。
他们得到了一个数列,通关要求为这个数列的和为0,并且只有一次改变一个数的符号的机会(正数变成负数,负数变成正数)。
请问小w与tokitsukaze能否通关,如果能,请输出有多少个数符合要求,如果不能,请输出-1。
输入
5
1 3 -5 3 4
输出
2
说明
只要把一个3变成-3,数列的和就变为0。数列里总共有两个3,所以有2个符合要求的数。
示例2
输入
4
1 2 4 8
输出
-1
【思路】:存到数组中--把第一个数变成相反数--求和--判断和是否为0--如是则(再把数转换成原来的数)--进行查找有几个是这个数,返回个数即可,则之后直接退出循环);--如果sun!=0则(把sum=0再进行第二次相同步骤即可)
C源程序如下:
#include<stdio.h>
#include<stdlib.h>
int ChongHeChaZhao(int n,int x,int a[10000]);
int main()
{
int n,i,j,x,a[10000],sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
a[i]=-a[i];
//printf("%d\n",a[i]);
for(j=0;j<n;j++)
{
sum=sum+a[j];
/*if(j==n-1)
printf("%d\n",sum);
else
printf("%d ",sum);*/
}
if(sum==0)
{
x=-a[i];
// printf("%d\n",x);
a[i]=-a[i];
printf("%d\n",ChongHeChaZhao(n,x,a));
exit(0);
}
else
{
a[i]=-a[i];
sum=0;
//printf("%d\n",a[i]);
}
}
printf("-1\n");
return 0;
}
int ChongHeChaZhao(int n,int x,int a[10000])
{
int i,c=0;
for(i=0;i<n;i++)
{
if(x==a[i])
c++;
}
return c;
}