3ds小游戏 --寒假作业(第八题)

题目描述:

小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;
}

猜你喜欢

转载自blog.csdn.net/qq_44075791/article/details/86522710