回 帖 发 新 帖 刷新版面

主题:入门必做的题

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

511 楼

我来说一下我的解题思想,具体的实现思路大家自己练手吧.我也是刚入门,说的不对的地方,欢迎指教.
1.  给定等式  A B C D E     其中每个字母代表一个数字,且不同数字对应不
                               D F G     同字母。编程求出这些数字并且打出这个数字的
                       +      D F G     算术计算竖式。

                       ───────

                        X Y Z D E
碰到这种题目,我的首要思想,就是采用遍历法(穷举法),让计算机去无穷的尝试,我们给出中断的条件.
例如满足a*10000+b*1000+c*100+D*10+e+(d*100+f*10+g)*2=x*10000+y*1000+z*100+d*10+e
而且a!=b!=!c.... 这是二个大的中断条件,中断完成.为了减不计算量,我们可以很简单的分析,A<9
G=0or 5),

2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
  人参加了竞赛:
   (1)A参加时,B也参加;
   (2)B和C只有一个人参加;
   (3)C和D或者都参加,或者都不参加;
   (4)D和E中至少有一个人参加;
   (5)如果E参加,那么A和D也都参加。
看了好多人的解答,其实完全没必要想的那么复杂,这个题是个回环条件,此题只需要一步赋值加判断即可.
例如:我们只需按照二种条件赋值下去,即a=1,a=0
a=1时,b=1,c=0,d=0,e=0
a=0时,b=0,c=1,d=1,e=0此题的e是不可能去参加比赛的,老师不喜欢他.c.d去了.


4. 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

此题的思路是首先根据N值,确定一个一维数据组,行,列的输出,主要是一个行变量,一个列变量.
循环次数变量的确定分析,第一列,顺序循环,循环次数=n,第二次,从a[1]开始,循环次数为5-1,
做二个独立循环,一个输出,正循环,一个输出剩余项的循环.

 5. 输入一个十进数,将其转换成 N 进制数(0<N<=16)。
做这道理,主要是要理解,十进数具体如何进行转换.举个例子.将5转成二进制数.
首先用5/2=2余1 此时余数作为末位数,此时第二位数是2,因为第二位数>=2,再除,余数是0,第二位数是0,第三位

现在是1了,<2,所以结果就出来了,101,
再举个8进制数,18,首先18/8=2余2 因为2<8,所以转换过来,就是22.
十一进制以后,要加个case,来判断abcde

6.第一题,我不用讲了,主要是确定行列的起始数值,例如第一列是25,第二列则是25-5,第三列是25-10

    第二题,


7.可以采用数组和指针的办法,进行置换.首先找出符合条件的单词,然后通过指针的移动,进行置换.

8.转换成二进制数,我前面已经讲过,可参照第5题,二进制数的加减.11+11=110,首先个位数相加,1+1=10,然后是
  十位数相加,1+1+1=3 ,>=2了,此时把3看作一个十进数,进行二进制的转换,得出11再加上末位的零,110
例如:10011+111,个位,1+1=10,十位数1+1+1=3,=11,此时个位和十位确定下来了是10,百位是1+1 =10,那么百位

就是0,千位是0+1
二进制数转换成十进制数,就相当于,个位+十位*2+百位*4+千位*8
1101=1+1*4+1*8=13

9.一人输了一次,如果火柴数为a,b,c,d第一次a输,则b=2b,c=2c,d=2D,a=a-(b+c+d),第二次,b输,b=b-(a+c+D),





16,先判断a+b=c+d, e+f=g+h
     再判断其中一组的值是否相等,不等的挑出来 ,2
    各取一个,进行二次判断,不等的挑出来.1
    再取一个,与前一组平的一个进行判断,就知道是重,还是轻了.1或者2
   大概称4次到5次,可以判断出来




28题和16题类似.

512 楼


太深澳,我是个初学者看不明白?

513 楼

好!收了!

514 楼

楼主太强了!!我的数学不差,可是很奇怪,对计算机总觉得很陌生,觉得他与我有障碍,不过我现在找到了学计算机的兴趣了,我会努力去突破这层障碍的!!!!!!!~~~努力,努力,再努力,一切梦想终会成真!!!

515 楼

第三题
#include <iostream.h>

int main()
{
 int n,i,j,m;
 char N[20][20];    
 char l[10]="TJ123456";
 cout<<"input N=";
 cin>>n;
 for (m=0;m<=n-1;m++)
 {
     for(i=m,j=m;j<=n-m-1;j++)
         N[i][j]=l[m];
     for(i=n-m-1,j=m;j<=n-m-1;j++)
         N[i][j]=l[m];
     for(j=m,i=m;i<=n-m-1;i++)
         N[i][j]=l[m];
     for(j=n-m-1,i=m;i<=n-m-1;i++)
         N[i][j]=l[m];
 }
 for(i=0;i<=n-1;i++)
 {
    for(j=0;j<=n-1;j++)
        cout<<N[i][j]<<" ";
    cout<<endl;
 }
 return 0;
 
}

516 楼


好啊!!要努力学好C啊!!!努力。。。[em4]

517 楼

太强悍了.

518 楼

我是学C语言的。看了楼主的题,才发现自己学得太浅薄了。悲哀啊,丢人啊。
不过我会发奋赶上来的

519 楼

非常好的贴子,顶一下!!!

520 楼

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

main()
{
  char c,a[8]={'T','J','1','2','3','4','5','6'};    
  int i,j;
  for(i=0;i<15;i++){
      for(j=0;j<15;j++){
          if(i<=8){
            if(j<=i)
              c=a[j];
            else if(14-j<=i) c=a[14-j];
          }
          else{
             if(j<=14-i)
               c=a[j];
             else if(14-j<=14-i) c=a[14-j];
           }
           printf("%c",c);
           if(j==14) printf("\n");
    }
 }           
}

我来回复

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