搜索解法

 

 

// 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值