匪警请拨110,即使手机欠费也可拨通!

本文介绍了一个使用C语言编写的程序,该程序能够找出所有可能的加号和减号组合,使得数字串123456789等于110。通过递归方法实现了对所有可能性的遍历,并计算每种组合的结果。

//此文我是用c语言写的!!!

为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!

 

某批警察叔叔正在进行智力训练:

 

    12 3 4 5 6 7 8 9 = 110;

 

请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。

 

请你利用计算机的优势,帮助警察叔叔快速找到所有答案。

 

每个答案占一行。形如:

 

12+34+56+7-8+9

123+4+5+67-89

......

 

已知的两个答案可以输出,但不计分。

 

各个答案的前后顺序不重要。

#include<stdio.h>
#include<string.h>
void  Dadd(char a[], int num);
int Sum(char a[],int flag);
int main()
{
	char a[] = "1 2 3 4 5 6 7 8 9";
	Dadd(a, 1);
	return 0;
}
void  Dadd(char a[], int num)  
{
	if (num == 17)
	{
		if ( Sum(a,1)== 110)
		{
			int k = strlen(a);
			for (int i = 0; i<k;i++)
			if (a[i] != ' ')
				printf("%c", a[i]);
			printf("\n");
		}
	}
	else
	{
		a[num] = ' ';
		Dadd(a, num + 2);
		a[num] = '+';
		Dadd(a, num + 2);
		a[num] = '-';
		Dadd(a, num + 2);
	}
}
int Sum(char a[],int flag)  
{
	int sum = 0, i = 0;
	while (a[i] != '\0')
	{
		if (a[i] == ' ')
		{
			i++;
			continue;
		}
		if (a[i] >= '0'&&a[i] <= '9')
			sum = sum * 10 + a[i] - '0';
		else if (a[i] == '+')
			return sum*flag + Sum(a + i + 1,1);
		else if (a[i] == '-')
			return sum*flag+Sum(a + i + 1,-1);
		i++;
	}
	return sum*flag;

}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里东君~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值