小提示:部分题目的图形有偏移现象;解决办法为,将题目拷贝到记事本,字体设置为‘Fixedsys’。
(编译环境:windowsXP_sp3 + Visual_C++_2008,保证编译成功,正常运行。)
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
代码如下:
#include<iostream>
using namespace::std;
int num[13]; //通过观察,算式中应该包括所有阿拉伯数字,定义一个整型数组存放算式中的每个数字
long m,n; //定义两个整型变量,分别代表ABCDE和DFG
void seperate(int* num, long abcde, long def, long xyzde); //此函数用于将整型变量分解并存放到数组中
int check(); //此函数用于检查这些等式的数字是否满足题目要求,如果满足则停止检查
void ok(); //打印结果
void main()
{
for(m=10234; m<98765; m++) //m可能的最小值是10234,最大值是98765
for(n=102; n<987; n++) //n可能的最小值是102,最大值是987
{
seperate(num, m, n, m+n*2);
if (check()) ok();
}
system( "pause" );
}
void seperate(int* nums, long abcde, long dfg, long xyzde)
{
long n; //定义临时的整型变量
/*
分解abcde
*/
n=abcde;
nums[4]=n%10;
n=n/10;
nums[3]=n%10;
n=n/10;
nums[2]=n%10;
n=n/10;
nums[1]=n%10;
n=n/10;
nums[0]=n%10;
/*
分解dfg
*/
n=dfg;
nums[7]=n%10;
n=n/10;
nums[6]=n%10;
n=n/10;
nums[5]=n%10;
/*
分解xyzde
*/
n=xyzde;
nums[12]=n%10;
n=n/10;
nums[11]=n%10;
n=n/10;
nums[10]=n%10;
n=n/10;
nums[9]=n%10;
n=n/10;
nums[8]=n%10;
}
int check()
{
int temp[10],m,n; //定义临时数组
/*
检查算式中相同字母所代表的数字是否相等
*/
if(num[0]==num[8]) return 0;
if(num[1]==num[9]) return 0;
if(num[2]==num[10]) return 0;
if(num[3]!=num[11]||num[3]!=num[5]) return 0;
if(num[4]!=num[12]) return 0;
/*
为临时数组赋值
*/
temp[0]=num[0];
temp[1]=num[1];
temp[2]=num[2];
temp[3]=num[3];
temp[4]=num[4];
temp[5]=num[6];
temp[6]=num[7];
temp[7]=num[8];
temp[8]=num[9];
temp[9]=num[10];
/*
检查临时数组中每个数字的唯一性
*/
for(m=0;m<10;m++)
{
for(n=m+1;n<10;n++)
if(temp[m]==temp[n]) return 0;
}
return 1;
}
void ok()
{
printf(" %d%d%d%d%d/n",num[0],num[1],num[2],num[3],num[4]);
printf(" %d%d%d/n",num[5],num[6],num[7]);
printf(" + %d%d%d/n",num[5],num[6],num[7]);
printf("----------/n");
printf(" %d%d%d%d%d/n",num[8],num[9],num[10],num[11],num[12]);
}