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

本文介绍了一种解决3DS游戏中小w与tokitsukaze遇到的数学难题的算法。目标是在一次操作内使数列和为0,通过将数组中的元素转换为其相反数并检查总和是否为零来实现。若成功,算法会返回符合条件的数的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

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

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值