回 帖 发 新 帖 刷新版面

主题:[讨论]GCC入门题部分题目解答

以下程序在VC6.0环境下测试通过
若出现程序编译不了,或需要注释的,可以加Q634419082
//////////////////////////////////////////////////////////////////////////////
//
//  1.  给定等式    A B C D E     其中每个字母代表一个数字,且不同数字对应不
//                      D F G     同字母。编程求出这些数字并且打出这个数字的
//          /    +      D F G     算术计算竖式。
//               ───────
//                  X Y Z D E
//////////////////////////////////////////////////////////////////////////////
//
//  (DE+FG+FG)%100 = DE -> FG = 50 
//  Z = (C+D+D+1)%10
//  Y = ((C+D+D+1)/10 + B)%10 && Y != 0 && Z != 0 
//    -> B == 9 && C +D +D +1 > 20 ->  C >= 5 && D >= 5
//  X != A ->X = A+1
//  E = 45 - (A +9 + C +D +E + 5 +0 +X +Y +Z) = 31 - A -C -D -E -X -Y -Z
/////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
void main()
{
    unsigned int a, c, d, e, x, y, z;

    printf("%10s\n", "A B C D E"); 
    printf("%10s\n", "D F G");
    printf("+%9s\n", "D F G");
    printf("%10s\n", "───────");
    printf("%10s\n\n\n", "X Y Z D E");

    for(a = 1; a < 9; a++)
    {
        if(a == 5)
            continue;
        for(c = 5; c < 9; c++)
        {
            if(c == a )
                continue;
            for(d = 5; d < 9; d++)
            {
                if(d == a || d == c)
                    continue;
                x = a +1;
                y = ((c +2*d +1)/10 + 9)%10;
                z = (c +2*d +1)%10;
                e = 31-a-c-d-x-y-z;
                if(x != a && y != a && z != a && e != a
                    && x != 9 && y != 9 && z != 9 && e != 9
                    && x != c && y != c && z != c && e != c
                    && x != d && y != d && z != d && e != d
                    && x != 5 && y != 5 && z != 5 && e != 5
                    && x != 0 && y != 0 && z != 0 && e != 0                    
                    && x != y && x != z && x != e && y != z
                    && y != e && z != e
                    && 10000*a +9000   +100*c +10*d +e +2*(100*d +50)
                    == 10000*x +1000*y +100*z +10*d +e)
                {
                    printf("%2d%2d%2d%2d%2d\n", a, 9, c, d, e);
                    printf("%*d%2d%2d\n", 6, d, 5, 0);
                    printf("+%*d%2d%2d\n", 5, d, 5, 0);
                    printf("%10s------------\n", "------------");
                    printf("%2d%2d%2d%2d%2d\n", x, y, z, d, e);
                }
            }
        }
    }
}

回复列表 (共144个回复)

121 楼

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

             ───────

                X Y Z D E




#include "stdafx.h"
#include "iostream.h"
bool different(int B,int C,int D,int E,int F,int G,int X,int Y,int Z)
{//if the 9 numbers are different,return true
  int arr[10],i,j;
  arr[1]=B;
  arr[2]=C;
  arr[3]=D;
  arr[4]=E;
  arr[5]=F;
  arr[6]=G;
  arr[7]=X;
  arr[8]=Y;
  arr[9]=Z;
  for(i=1;i<9;i++)//若有两个相同返回 false
      for(j=i;j<9;j++)
          if(arr[i]==arr[j+1])
              return false;
  return true;
}
void main( )
{
   long data;
   int a=0,b,c,d,e,f,g,x,y,z,k;
   for(data=123456789;data<=987654321;data=data+1)//所有不同的组合方式
   { 
     
       b=data/100000000;
       c=data/10000000-b*10;
       d=data/1000000-data/10000000*10;
       e=data/100000-data/1000000*10;
       f=data/10000-data/100000*10;
       g=data/1000-data/10000*10;
       x=data/100-data/1000*10;
       y=data/10-data/100*10;
       z=data-data/10*10;
       if((b*c*d*e*f*g*x*y*z!=0) && different(b,c,d,e,f,g,x,y,z))
       {   cout<<data<<endl;
           if(b*10000+c*1000+d*100+e*10+2*(g+10*f+100*d)==e+d*10+z*100+y*1000+x*10000)
           {       cout<<a  <<b  <<c  <<d  <<e  <<f  <<g  <<x  <<y  <<z  <<endl;
                   cout<<"please input a number"; 
                   cin>>k;           
           }     
       }
   }
}

122 楼

楼主第二题的程序中数组的初始值为其他值是可能导致结果有错误
例如
01010时
望楼主能给出一个更通用的程序
谢谢

123 楼


第一题果然有难度啊!难以想象啊![em18]太晕了!

124 楼

TO MJGG:已改正,谢谢

125 楼

不是GCC入门题吗,怎么在VC6.0环境下测试呢

126 楼

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

第一题手解:

1: G + G + E = aE, F + F + D + a = bD  => F = 5, G = 0, b = 1
    A B C D E
        D 5 0
  +     D 5 0
    X Y Z D E
2: ABC + D + D + 1 = XYZ && G = 0
      => D > 5, A + 1 = X, B = 9, Y = 1, C Z 奇偶性不同
    A 9 C D E
        D 5 0
  +     D 5 0
    X 1 Z D E
3: 剩余数字 234678 ,A/X,C/Z 均为奇偶对
      => D、E 均为偶数,又由上有 C + D + D + 1 = 2Z ,
      => (C,D,Z) = { (6,8,3), (7,8,4) } ,其中 (6,8,3) 无法满足 A + 1 = X ,舍弃
      => C = 7, D = 8, Z = 4
4: 剩余 236 ,A + 1 = X
      => A = 2, X = 3, E = 6.

结论:   29786
          850
       +  850
        31486

127 楼

谢谢楼主的帖,太号了!实在太好了,十分感谢!!

128 楼

流程图怎么写?

129 楼

4. 在N行N列的数阵中, 数K(1〈=K〈=N)在每行和每列中出现且仅
  出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个五阶拉丁方阵。
  编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数。

        1  2  3  4  5
        2  3  4  5  1
        3  4  5  1  2
        4  5  1  2  3
        5  1  2  3  4


是不是可以这么写?
#include<stdio.h>
#define N 6
int main(void)
{
        int i,j;
        for(i = 0;i < N;i++)
        {
                for(j = 0;j < N;j++)
                {
                        printf("%2d",(i + j) % N + 1);
                }
                printf("\n");
        }
        return 0;
}

130 楼

理解错了,要求一共有多少种..

我来回复

您尚未登录,请登录后再回复。点此登录或注册