搜索解法

 

 

//  FindValue.cpp : Defines the entry point for the console application.
/*

1.  给定等式    A B C D E     其中每个字母代表一个数字,且不同数字对应不
                    D F G     同字母。编程求出这些数字并且打出这个数字的
             +      D F G     算术计算竖式。

             ───────

                X Y Z D E
*/
//  作者: xmxoxo
//  编写: 2006.11.21
//  版本: v1.0

/* 简单算法,直接一个个找,并没有具体分析
其实数字正好10个,正好是0-9,题目转换成
如何输出0-9的全排列,然后在这些排列中寻找
满足条件的排列.
*/

#include 
" stdafx.h "
#include 
" iostream.h "
#include 
" time.h "
#include 
" string.h "


// 输出算式
void   out ( char  v[ 10 ])
{
    cout
<< "     " << v[ 0 ] << v[ 1 ] << v[ 2 ] << v[ 3 ] << v[ 4 ] << endl;
    cout
<< "       " << v[ 3 ] << v[ 5 ] << v[ 6 ] << endl;
    cout
<< " +     " << v[ 3 ] << v[ 5 ] << v[ 6 ] << endl;
    cout
<< " ─────── " << endl;
    cout
<< "     " << v[ 7 ] << v[ 8 ] << v[ 9 ] << v[ 3 ] << v[ 4 ] << endl;
}

// 判断条件
bool  isok( char  va[ 10 ])
{
    
int  a,b,c;
    
int  v[ 10 ],i;
    
for  (i = 0 ;i < 10 ;i ++ )
    {
        v[i]
= va[i] - ' 0 ' ;
    }
    a
= v[ 0 ] * 10000 + v[ 1 ] * 1000 + v[ 2 ] * 100 + v[ 3 ] * 10 + v[ 4 ];
    b
= v[ 3 ] * 100 + v[ 5 ] * 10 + v[ 6 ];
    c
= v[ 7 ] * 10000 + v[ 8 ] * 1000 + v[ 9 ] * 100 + v[ 3 ] * 10 + v[ 4 ];
    
if  (a + b + b == c)
    {
        
return   1 ;
    }
    
else
    {
        
return   0 ;
    }
}

// 用递归的思路输出全排列
void  fooEx( char  first[], char  text[])
{
    
// int intRet=0;
     int  i = 0 ;
    
int  len = 0 ;
    
char  tmp[ 256 ];
    
char  f[ 256 ];
    
char  newf[ 2 ];
    
char   * strret;
    
long  j = 0 ;

    len
= strlen(text);
    
// intRet = FooCount(len);

    
// 如果只有一个字符
     if  (len == 1 )
    {
        
// printf("%s",first);
        
// 打印字符串,并换行
        
// printf("%s ",text);
        strret  =  strcat(first,text);
        
if  (isok(strret))
        {
            
out (strret);
        }
    }
    
else
    {
        
// 如果是多个字符,则依次打出每个字符
         for  (i = 0 ;i < len;i ++ )
        {
                strcpy(f,first);
                
// 取出第一个字符,
                newf[ 0 =  text[i];
                newf[
1 =   '

 结果:

 

  29786
       850
+     850
───────
   31486
Press any key to continue

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值