回 帖 发 新 帖 刷新版面

主题:入门必做的题

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

             ───────

                X Y Z D E



  2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
  人参加了竞赛:

   (1)A参加时,B也参加;

   (2)B和C只有一个人参加;

   (3)C和D或者都参加,或者都不参加;

   (4)D和E中至少有一个人参加;

   (5)如果E参加,那么A和D也都参加。



  3. 打印一个 N*N 的方阵,N为每边           N=15  打印出下面图形
 字符的个数(3<N<20), 要求最               TTTTTTTTTTTTTTT
 外一层为"T", 第二层为"J", 从第三层               TJJJJJJJJJJJJJT
 起每层依次打印数字 1,2,3,...                     TJ11111111111JT
 (右图以N为15为例)                           TJ12222222221JT
                                                  TJ12333333321JT
                                                  TJ12344444321JT
                                                  TJ12345554321JT
                                                  TJ12345654321JT
                                                  TJ12345554321JT
                                                  TJ12344444321JT
                                                  TJ12333333321JT
                                                  TJ12222222221JT
                                                  TJ11111111111JT
                                                  TJJJJJJJJJJJJJT
                                                  TTTTTTTTTTTTTTT



  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


  5. 输入一个十进数,将其转换成 N 进制数(0<N<=16)。

回复列表 (共635个回复)

601 楼

顶啊,但源代码也要写出来啊,以便参考

602 楼


好帖,顶,源代码也写出来,以便参考,谢了

603 楼


可是有没有答案呢。- -,

604 楼

不错

605 楼

/*第一题 
  题目: 
  给定等式  
                A B C D E     
                    D F G     
             +      D F G     
             ───────
                X Y Z D E
  其中每个字母代表一个数字,且不同数字对应不同字母。
  编程求出这些数字并且打出这个数字的算术计算竖式。
*/
/*
   分析:
   由于A、B、C、D、E、F、G、X、Y、Z代表十进制的一位数
   所以只有0~9或1~9有限种可能
   对A依次取1,2,……9,记录 
   对B依次取0,1,……9,判断是否与A值重复,如重复取下一个,如不重复,记录 
   对C依次取0,1,……9,判断是否与A、B值重复,如重复取下一个,如不重复,记录  
   ……
   对Z依次取0,1,……9,判断是否与A~Y值重复,如重复取下一个,如不重复,记录 
   判断是否满足题目的等式,如等式成立则输出 
*/

#include <stdio.h>
#include <stdlib.h>
#define SX  9   //十进制的一位数的上限
#define XX1 1   //一十进制的位数的下限(A、D、X)
#define XX0 0   //十进制的一位数的下限(B、C、E、F、G、Y、Z)

#define GE  1  
#define SHI 10*GE
#define BAI 10*SHI
#define QIA 10*BAI
#define WAN 10*QIA
#define SWS(a,b,c)      ( (a)*BAI + (b)*SHI + (c)*GE )      //三位数 
#define WWS(a,b,c,d,e)  ( (a)*WAN + (b)*QIA + SWS(c,d,e) )  //五位数 

typedef enum zm{A,B,C,D,E,F,G,X,Y,Z}ZM; //字母的编号 
typedef enum yesno{NO,YES}YN;
#define GS  10                          //字母的个数 

void xunzhao(const ZM );    //寻找字母可能的值 
int  xiaxian(const ZM );    //字母取值的下限 
YN cf(const int * const ,const  ZM ,const  int ); //判断选择的数值是否与前面的重复 
void chuli (const int * const , const int );      //对结果进行处理 
void shuchu(const int , const int , const int , const int ); 

int main(void)
{   
    xunzhao(A); 

    system("Pause"); 
    return 0;
}

//寻找各个字母可能的值 
void xunzhao(const ZM zm)
{    static int jg[GS] ;                      //jg 数组存放选择的结果 
     int tmp;
     for ( tmp = xiaxian(zm) ; tmp <= SX ; tmp ++ )   //尝试着取一个值 
         {   if( cf( jg , zm , tmp ) == YES )        //重复则取下一个值 
                continue ;
             jg [zm] = tmp ;                         //写入选择的数 
              
          if ( zm == Z )                               //A~Z全部选择完毕 
                  chuli ( jg , sizeof jg / sizeof *jg ) ; //对结果进行处理 
      else
                  xunzhao( zm + 1 );                      //寻找下一个 
        }
}

//如果满足题目等式则输出 
void chuli (const int * const a_z , const int gs)
{
     int abcde = WWS ( a_z[A],a_z[B],a_z[C],a_z[D],a_z[E] ) ;
     int   dfg = SWS (               a_z[D],a_z[F],a_z[G] ) ;
     int xyzde = WWS ( a_z[X],a_z[Y],a_z[Z],a_z[D],a_z[E] ) ;
     if(   abcde \
        +    dfg \
        +    dfg \
        ==  xyzde )
        shuchu( abcde,dfg,dfg,xyzde );      
}

//判断是否与前面选过的值重复 
YN cf(const int * const jg , const  ZM wz ,const int shu )
{
   const int *p;
   for ( p = jg ; p < jg + wz ; p ++ ) 
       if ( shu == *p )
    return YES ;
   return NO;                     
}

//求各个字母的下限值 
int  xiaxian(const ZM zm)
{    //A、D、X 最少为 1 
     if ( zm == A ) return XX1 ;
     if ( zm == D ) return XX1 ;
     if ( zm == X ) return XX1 ;
     return XX0 ;
}

//按照题目格式输出4个数 
void shuchu(const int s1 ,const int s2 ,const int s3 ,const int s4 )
{
    printf ( "%10d\n" ,s1 ); 
    printf ( "%10d\n" ,s2);
    printf ( "%10d\n" ,s3);
    printf ( "+_________\n" );
    printf ( "%10d\n\n" ,s4 ); 
    return ;
}

606 楼

怎么贴出来的这么难看
默认设置应该改改

607 楼

再试试
[size=2]/*第一题 
  题目: 
  给定等式  
                A B C D E     
                    D F G     
             +      D F G     
             ───────
                X Y Z D E
  其中每个字母代表一个数字,且不同数字对应不同字母。
  编程求出这些数字并且打出这个数字的算术计算竖式。
*/
/*
   分析:
   由于A、B、C、D、E、F、G、X、Y、Z代表十进制的一位数
   所以只有0~9或1~9有限种可能
   对A依次取1,1,……9,记录 
   对B依次取0,1,……9,判断是否与A值重复,如重复取下一个,如不重复,记录 
   对C依次取0,1,……9,判断是否与A、B值重复,如重复取下一个,如不重复,记录  
   ……
   对Z依次取0,1,……9,判断是否与A~Y值重复,如重复取下一个,如不重复,记录 
   判断是否满足题目的等式,如等式成立则输出 
*/

#include <stdio.h>
#include <stdlib.h>
#define SX  9   //十进制的一位数的上限
#define XX1 1   //一十进制的位数的下限(A、D、X)
#define XX0 0   //十进制的一位数的下限(B、C、E、F、G、Y、Z)

#define GE  1  
#define SHI 10*GE
#define BAI 10*SHI
#define QIA 10*BAI
#define WAN 10*QIA
#define SWS(a,b,c)      ( (a)*BAI + (b)*SHI + (c)*GE )      //三位数 
#define WWS(a,b,c,d,e)  ( (a)*WAN + (b)*QIA + SWS(c,d,e) )  //五位数 

typedef enum zm{A,B,C,D,E,F,G,X,Y,Z}ZM; //字母的编号 
typedef enum yesno{NO,YES}YN;
#define GS  10                          //需要求的字母的个数 

void xunzhao(const ZM );    //寻找字母可能的值 
int  xiaxian(const ZM );    //字母取值的下限 
YN cf(const int * const ,const  ZM ,const  int ); //判断选择的数值是否与前面的重复 
void chuli (const int * const , const int );      //对结果进行处理 
void shuchu(const int , const int , const int , const int ); 

int main(void)
{   
    xunzhao(A); 
    system("Pause"); 
    return 0;
}

//寻找各个字母可能的值 
void xunzhao(ZM zm)
{    static int jg[GS] ;                      //jg 数组存放选择的结果 
     int tmp;
     for ( tmp = xiaxian(zm) ; tmp <= SX ; tmp ++ )   //尝试着取一个值 
         {   if( cf( jg , zm , tmp ) == YES )        //重复则取下一个值 
                 continue ;
             jg [zm] = tmp ;                         //写入选择的数 
         
             if ( zm == Z )                               //A~Z全部选择完毕 
                  chuli ( jg , sizeof jg / sizeof *jg ) ; //对结果进行处理 
             else
                  xunzhao( zm + 1 );                      //寻找下一个 
         }
     return ;
}

//如果满足题目等式则输出 
void chuli (const int * const a_z , const int gs)
{
     int abcde = WWS ( a_z[A],a_z[B],a_z[C],a_z[D],a_z[E] ) ;
     int   dfg = SWS (               a_z[D],a_z[F],a_z[G] ) ;
     int xyzde = WWS ( a_z[X],a_z[Y],a_z[Z],a_z[D],a_z[E] ) ;
     if(   abcde \
        +    dfg \
        +    dfg \
        == xyzde )
        shuchu( abcde,dfg,dfg,xyzde );  
     return ;     
}

//判断是否与前面选过的值重复
YN cf(const int * const jg , const  ZM wz ,const int shu )
{
   const int *p;
   for ( p = jg ; p < jg + wz ; p ++ ) 
       if ( shu == *p )
          return YES ;
   return NO;                     
}

//求各个字母的下限值 
int  xiaxian(const ZM zm)
{    //A、D、X 最少为 1 
    if ( zm == A ) return XX1 ;
    if ( zm == D ) return XX1 ;
    if ( zm == X ) return XX1 ;
    return XX0 ;
}

//按照题目格式输出4个数 
void shuchu(const int s1 ,const int s2 ,const int s3 ,const int s4 )
{
    printf ( "%10d\n" ,s1 ); 
    printf ( "%10d\n" ,s2);
    printf ( "%10d\n" ,s3);
    printf ( "+_________\n" );
    printf ( "%10d\n\n" ,s4 ); 
    return ;
}[/size]

608 楼

输出:

     29786
       850
       850
+_________
     31486

请按任意键继续. . .

609 楼

强烈支持!

610 楼

第8题很弱智

我来回复

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