C++入门必做题 答案 01

小提示:部分题目的图形有偏移现象;解决办法为,将题目拷贝到记事本,字体设置为‘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]);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值