练习1

/**************************************************************************

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

             ───────

                X Y Z D E

  分析得:
  F = 5
  G = 0
  X = A + (B + (C + D + D + 1) / 10) / 10
  Y = (B + (C + D + D + 1) / 10) %10
  Z = (C + D + D + 1) % 10
  
  ************************************************************************/

#include <stdio.h> 

enum{A=0,B,C,D,E,F,G,X,Y,Z};

int nNum[10];

char* exp = "/
    %d %d %d %d %d/n/
        %d %d %d/n/
 +      %d %d %d/n/
───────/n/
    %d %d %d %d %d/n";

int checked()
{
 int i,j;
 for(i=0; i<=9; i++)
 {
  for(j=i+1; j<=9; j++)
   if(nNum[i] == nNum[j])
   return 0;
 }
 return 1;
}

void output()
{
 printf(exp,nNum[A],nNum[B],nNum[C],nNum[D],nNum[E],nNum[D],nNum[F],
  nNum[G],nNum[D],nNum[F],nNum[G],nNum[X],nNum[Y],nNum[Z],nNum[D],nNum[E]);
 printf("/n");
}

void main()
{
 nNum[F] = 5;
 nNum[G] = 0;

 for(nNum[A]=1; nNum[A]<=9; nNum[A]++)
 {
  for(nNum[B]=1; nNum[B]<=9; nNum[B]++)
  {
   for(nNum[C]=1; nNum[C]<=9; nNum[C]++)
   {
    for(nNum[D]=1; nNum[D]<=9; nNum[D]++)
    {
     for(nNum[E]=1; nNum[E]<=9; nNum[E]++)
     {
      nNum[X] = nNum[A] + (nNum[B] + (nNum[C] + nNum[D] + nNum[D] + 1)/10)/10;
      nNum[Y] = (nNum[B] + (nNum[C] + nNum[D] + nNum[D] + 1)/10)%10;
      nNum[Z] = (nNum[C] + nNum[D] + nNum[D] + 1)%10;
      if(checked())
      {
       output();
      }
     }
    }
   }
  }
 }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值