警匪请拨110

5 篇文章 0 订阅
5 篇文章 0 订阅
问题描述:
    请看算式: 12+3+4+5+6+7+8+9=110

     可以在1~9之间填入 + - 或不填(1 2之间不填表示12)

    请用计算机算出其余的情况,例如:12+34+56+7-8+9=110  123+4+5+67-89=110 . . .

    各答案的出场顺序不做要求。 

解题思路:

    利用深搜算法dfs,模拟出所有情况,并打印出合法的。

代码如下:

#include<stdio.h> 
char a[10];
int add()
{
	int sum=0;
	int i,j=1;
	int b[9]; 
	char c[9]; 
	b[0]=1;
	for(i=1;i<9;i++)
	{
		if(a[i]!=' ')
		{
			c[j]=a[i];
			j++; 
		}
	}
	j=0;
	for(i=1;i<9;i++)
	{
		if(a[i]==' ')
		{
			b[j]=10*b[j]+i+1; 
		}
		else
		{
			b[++j]=i+1;	
		} 
	}
    sum=b[0];
	for(i=1;i<=j;i++)
	{
		if(c[i]=='+')
			sum+=b[i];
		else 
			sum-=b[i];
	}
		
	return sum;
}

void f(int ceng,char a[])
{
   int i;
   if(ceng==9&&add()==110 )
   {
       printf("%d = ",add());
     for(i=1;i<10;i++)
     {
     	printf("%d",i);
     	if(a[i]!=' ')
     		printf("%c",a[i]);
	 }
	 printf("\n");
	 return; 
	}
   if(ceng<9)
   {
		a[ceng]='+';
		   	f(ceng+1,a);
		a[ceng]='-';
   			f(ceng+1,a);
   		a[ceng]=' ';
		   f(ceng+1,a);
   }
}
int main()
{
	int ceng=1;
    f(ceng,a);
    return 0;
}
运行结果:

110 = 1+2+34+5+67-8+9
110 = 1+234-56-78+9
110 = 1-2+3+45-6+78-9
110 = 12+3+45+67-8-9
110 = 12+34+56+7-8+9
110 = 12-3+4-5+6+7+89
110 = 123+4+5+67-89
110 = 123+4-5-6-7-8+9
110 = 123-4+5-6-7+8-9
110 = 123-4-5+6+7-8-9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值