填符号凑算式 趣味算式

/*1 2 3 4 5 6 7 8 9 = 110;*/
#include<iostream>
using namespace std;
int num[10] = {1,2,3,4,5,6,7,8,9};
char visit[10];
int for_sum()
{
 int sum = 0;
 int pre_fig = 0; //当前数的前一个数
 char pre = '0';
 int i = 0; 
 for(i = 0 ; i< 9; i++)
 {
  if(visit[i] == '0')
  { 
   pre_fig = pre_fig * 10 + num[i];
  } 
  if(visit[i] == '+')
  { 
   if(pre == '0')
   {    //此种情况只适用于第一个数
    sum = pre_fig;  ///????    0+12+3不属于这种情况   所以需pre这个变量记录0和12 之间的+号
    pre_fig = num[i]; 
   } 
   if(pre == '+')
   {  
    sum = sum + pre_fig;  
    pre_fig = num[i];  
   } 
   if(pre == '-')
   {    
    sum = sum - pre_fig;
    pre_fig = num[i]; 
   } 
   pre = '+';
  } 
  if(visit[i] == '-')
  {     
   if(pre == '0')
   {   
    sum = pre_fig; 
    pre_fig = num[i];
   }  
   if(pre == '+')
   {   
    sum = sum + pre_fig;
    pre_fig = num[i];
   }  
   if(pre == '-')
   {    
    sum = sum - pre_fig;
    pre_fig = num[i]; 
   }  
   pre = '-';
  } 
 } 
 if(pre == '0')
 { 
  sum = pre_fig;
  pre_fig = num[i];
 }
 if(pre == '+')
 {  
  sum = sum + pre_fig;
  pre_fig = num[i];
 } 
 if(pre == '-')
 { 
  sum = sum - pre_fig;
  pre_fig = num[i];
 }
 return sum;
}

void dfs(int cur)
{
 if(cur > 8)
 {  
  int sum = for_sum();
  if(sum == 110)
  {
   for(int i = 0 ; i< 9 ; i++)
   {  
    cout<<num[i];
    if(visit[i + 1] == '0')
    {     }
    else{
     cout<<visit[i + 1];
    }   
   }  
   cout<<endl;
  } 
 }
 else if(cur <= 8)
 {  
  visit[cur] = '0'; 
  dfs(cur + 1);
  visit[cur] = '+';
  dfs(cur + 1); 
  visit[cur] = '-';
  dfs(cur + 1);
 }
}
int main()
{
 memset(visit,'0',sizeof(visit));
 dfs(1); 
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值