// 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] = '
/*
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