回 帖 发 新 帖 刷新版面

主题:入门必做的题

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个回复)

131 楼


真的假的,我没做过这么难也入门了

132 楼

我承认这些题不错,我做过的几道对自己的编程能力也有提高,但解一道至少要花1小时(入门的人除外),称为“入门必做”不太合适吧。而且,学习编程不应该是为了解决这些奇怪的题目吧。

133 楼

这么难的题目  怎么做呀 
不知阁下有没有答案呢?
有的话
把答案也发上来
那起不是很好?

134 楼

此贴不顶,誓不为人啊!!!!!!!!

135 楼

看了。。。在晕。。。。

136 楼

to 132楼
这些题算奇怪的题吗?...

准略的说,应该是编程不应"只"为解难题吧?

编程不"只"为解难题,不假,
但难题有助于提高编程能力,很真.

137 楼

顶!!!
但能不能给一些答案呀,有的题不是很懂呀,最好大家交流一下

138 楼

我做了几个,大家交流一下,还望高手能帮一下大家
/*********************************************************************
    给定等式    A B C D E     其中每个字母代表一个数字,且不同数字对应不
                    D F G     同字母。编程求出这些数字并且打出这个数字的
             +      D F G     算术计算竖式。
             ───────
                X Y Z D E
**********************************************************************/
#include"stdio.h"
main()
{
 int a,c,d,e,x,z;
 for(c=6;c<=8;c++)
    for(d=6;d<=8;d++)
    if(c+d+d+1>20&&d!=c)
       for(a=2;a<7;a++)
        if(a!=c&&a!=d&&a!=5)
        {x=a+1,z=c+d+d-19;
        if(z!=0&&z!=a&&z!=1&&x!=5&&x!=c&&x!=d&&x!=9&&z!=a&&z!=x)
          for(e=2;e<9;e++)
                    if(e!=a&&e!=5&&e!=d&&e!=z&&e!=x&&e!=c)
                printf("\na=%d,b=9,c=%d,d=%d,e=%d,f=5,g=0,x=%d,y=1,z=%d",a,c,d,e,x,z);
        }
}
/**************************************************************************
2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些人参加了竞赛:
   (1)A参加时,B也参加;
   (2)B和C只有一个人参加;
   (3)C和D或者都参加,或者都不参加;
   (4)D和E中至少有一个人参加;
   (5)如果E参加,那么A和D也都参加。
    0参加,1不参加
******************************************************************************/
#include"stdio.h"
main()
{
 int a,b,c,d,e;
 for(e=0,a=0;e<2;e++)
  {
     if(e)a=1,d=1;      /*5*/
     else d=1,c=d;      /*4, 3*/
      for(;a<2;a++)
      {
       if(a){ b=1;       /*1*/
              if(b!=c)  /*2*/
             printf("\na=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
            }
        else 
            {
                 if(c) b=0;
                 else b=1;
                 printf("\na=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
              }
         }
    }
}

139 楼

我做了几个,大家交流一下,还望高手能帮一下大家
/*********************************************************************************************
*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

*题解:用二维数组将方阵的上半部存贮,右半部=左半部,上半部=下半部,可用循环对上左半部赋值再用对称法
*      求出其它的,注意数字的输出可用相应ASSIC码值
*********************************************************************************************/
#include "stdio.h"
/*输出*/
void putout(char a[20][20],int n)
     {
      int i;  
      for(i=0;i<n;i++)
         printf("\n\t%s",a[i]);
     }
/*列镜面赋值*/
void mirrorcol(char a[20][20],int n)
     {
      int i,j;
      for(i=0;i<(n+1)/2;i++)
         for(j=(n+1)/2;j<n;j++)
            a[i][j]=a[i][n-j-1];        /*算法*/
     }
/*行镜面赋值*/
void mirrorrow(char a[20][20],int n)
     {
      int i,j;
      for(i=(n+1)/2;i<n;i++)
         for(j=0;j<=n;j++)
            a[i][j]=a[n-i-1][j];         /*算法*/
     }
main()
{
 char a[20][20];
 int i,j,n,k=49,m;
 printf("\nplease insert the value of n(3<n<20) : ");
 scanf("%d",&n);
 for(i=0;i<(n+1)/2;i++)   /*对行的前一半与列的前一半赋值*/
     {
      a[i][n]='\0',a[i][0]='T',a[i][1]='J';
      if(i==0)
         for(j=1;j<(n+1)/2;j++)
             a[i][j]='T';
      else if(i==1)
         {
          for(j=2;j<(n+1)/2;j++)
             a[i][j]='J';  
         }    
      else for(j=2,m=i-1;j<(n+1)/2;j++,k++,m--)  /*m控制数到几为止*/
              if(m>0)
                 a[i][j]=k;
              else a[i][j]=a[i][j-1];
      k=49;
     }
 mirrorcol(a,n);            /*列镜面赋值*/
 mirrorrow(a,n);            /*行镜面赋值*/
 putout(a,n);
 getch();
}
/**********************************************************************************
9. 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有多少根火柴? 编程解决此问题。
*********************************************************************************/
/*从最后一局开始判断*/
#include "stdio.h"
/*a为输第四局的,b为输第三局的,c为输第二局的,d为输第一局的*/
main()
{
 int a=16,b=16,c=16,d=16;
 d=d/2,b=b/2,c=c/2,a=b+c+d+a; 
 d=d/2,a=a/2,c=c/2,b=b+c+d+a;
 d=d/2,b=b/2,a=a/2,c=b+c+d+a;
 a=a/2,b=b/2,c=c/2,d=b+c+d+a;
 printf("\nthe 1th faller has %d stick",d);
 printf("\nthe 2th faller has %d stick",c);
 printf("\nthe 3th faller has %d stick",b);
 printf("\nthe 4th faller has %d stick",a);
 getch();
}

140 楼

支持!我觉得好难`

我来回复

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