枫林在线论坛精华区>>程序设计
[21347] 主题: 一个关于C语言的问题
作者: Numino (奥格)
标题: 一个关于C语言的问题
来自: 61.129.*.*
发贴时间: 2002年09月26日 17:24:09
长度: 755字
如何用C语言打印如下矩阵:(11*11)
 1  2  3  4  5  6  7  8  9 10 11
40  41…………………………     12
39 ………………………………    13
38 ………………………………    14
37 ………………………………    15
36 ………………121……………   16
35 ………………………………    17
34 ………………………………    18
33 ………………………………    19
32 ………………………………    20
31 30 29 28 27 26 25 24 23 22 21
 
~~~~~~~~~~~~~~~~~~~~
°∴·°∴°★.☆° .★·°∴°★.° .·。∴。∴°★.
     ° .★··。∴°..·°∴·°∴°★.☆° .★·°∴°★.

       不是我想要做什么,而是病人需要我做什么
°..·°∴·°∴°★.☆° .★·°∴°★.° .·。∴°.
    .·°∴·°∴°★.☆° .★·°∴°★.°     

~~~~~~~~~~~~~~~~~~~~

========== * * * * * ==========
作者: leaflet (Leaf)
标题: RE:一个关于C语言的问题
来自: 61.129.*.*
发贴时间: 2002年09月27日 10:37:41
长度: 961字
说一种比较复杂但更具通用性的解题思路:

1)设置一个13*13的数组,置0,最外圈置-1。
2)设置两个变量,分别表示当前位置的行和列;设置一个变量,表示当前
所在位置元素的值。
3)从数组的(1,1)位置开始,采用顺时针方向试探方法,对于相邻元素
为0的赋比当前元素增1的值,并以改元素作为进一步试探的出发点。该步
骤可以采用递归或递代实现(建议使用递代,效率高)。需要一个变量表
示当前前进方向。
4)所有元素均为非0值时,自动回朔,赋值结束。
5)采用循环顺序输出最外圈除外的数组的值,就是所求结果。

=============================

奥格在其大作中写道:
如何用C语言打印如下矩阵:(11*11)
 1  2  3  4  5  6  7  8  9 10 11
40  41…………………………     12
39 ………………………………    13
38 ………………………………    14
37 ………………………………    15
36 ………………121……………   16
35 ………………………………    17
34 ………………………………    18
33 ………………………………    19
32 ………………………………    20
31 30 29 28 27 26 25 24 23 22 21



========== * * * * * ==========
作者: hello (随便说)
标题: foolish but simple solution
来自: 210.22.*.*
发贴时间: 2002年09月27日 21:26:05
长度: 696字
#include "stdio.h"
#define N 11
int main(int argc, char* argv)
{
    int i, j;
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
            if(i==0){
                printf("%3d", j+1);
            }else if(i==(N-1)){
                printf("%3d", N*3-2-j);
            }else{
                if(j==0){
                    printf("%3d", N*4-3-i);
                }else if(j==(N-1)){
                    printf("%3d", N+i);
                }else if(i==N/2 && j==N/2){
                    printf("%3d", N*N);
                }else{
                    printf("  .");
                }
            }
        }
        printf("\n");
    }
    return 0;
}
========== * * * * * ==========
作者: Numino (奥格)
标题: RE:
来自: 203.95.*.*
发贴时间: 2002年10月08日 14:11:14
长度: 814字
main()
{int a[11][11],i,j;
 for(i=0;i<11;i++){
  if(i>=0&&i<=5)
   a[i][i]=1+44*i-4*i*i;
  else
   a[i][i]=21+40*i-4*i*i;}
 for(i=0;i<11;i++)
  for(j=0;j<11;j++){
   if(i+j<=10&&i<=j)
    a[i][j]=a[i][i]+j-i;
   else if(i+j<=10&&i>j)
    a[i][j]=a[j+1][j+1]+j-i;
   else if(i+j>10&&i<=j)
    a[i][j]=a[j][j]+i-j;
   else
    a[i][j]=a[i][i]+i-j;}
 for(i=0;i<11;i++){
  for(j=0;j<11;j++){
   printf("%4d",a[i][j]);}
   printf("\n");}
 printf("\n");
}

~~~~~~~~~~~~~~~~~~~~
°∴·°∴°★.☆° .★·°∴°★.° .·。∴。∴°★.
     ° .★··。∴°..·°∴·°∴°★.☆° .★·°∴°★.

       不是我想要做什么,而是病人需要我做什么
°..·°∴·°∴°★.☆° .★·°∴°★.° .·。∴°.
    .·°∴·°∴°★.☆° .★·°∴°★.°     

~~~~~~~~~~~~~~~~~~~~

========== * * * * * ==========
作者: raccoon (益*--1eE...zzZ*潜航)
标题: RE:一个关于C语言的问题
来自: 61.152.*.*
发贴时间: 2003年07月22日 22:00:09
长度: 1527字
   晕,离楼上的那一贴也快半年了,不过还是发这贴,用的是VB

   原数组是在直角坐标系定义的
   就是以如图方式的数字排列,每一个整数点(x,y)都对应一个值,
先计算出这个值,存储在数组元素Num(x,y)中.






   最后只要按要求打印Num(x,y)即可.


程序如下,控件只有一个,就是Form
************************************************************
Option Explicit
Const N = 11
Dim x As Integer, y As Integer
Dim k As Integer          '注释: 为简化行文而设k, k = (N-1)/2
Dim Num(-(N - 1) / 2 To (N - 1) / 2, -(N - 1) / 2 To (N - 1) / 2
)   '注释:数组定义
------------------------------------------------------------

Private Sub Form_click()
k = (N - 1) / 2

For x = -k To k
    For y = -k To k
        If y >= x And y <= -x - 1 Then
            Num(x, y) = (2 * -x - 1) ^ 2 - x - y         '注释:其
中-x=Abs(x)
        ElseIf y <= x And y <= -x Then
            Num(x, y) = (2 * -y - 1) ^ 2 - 3 * y + x     '注释:其
中-y=Abs(y)
        ElseIf y >= -x And y <= x Then
            Num(x, y) = (2 * x - 1) ^ 2 + 5 * x + y      '注释:x
=Abs(x)
        ElseIf y >= -x And y >= x Then
            Num(x, y) = (2 * y - 1) ^ 2 + 7 * y - x      '注释:y
=Abs(y)
        End If
    Next y
Next x


For y = k To -k Step -1          '注释:将数组处理后打印, N^2 + 1
 - Num(x,y)
    For x = -k To k
        Print Format(N * N + 1 - Num(x, y), "@@@@");
    Next x
    Print
Next y

End Sub
************************************************************
 
                            








 
~~~~~~~~~~~~~~~~~~~~
※作者已于 2003-07-23 17:59:58 修改本文※

~~~~~~~~~~~~~~~~~~~~

========== * * * * * ========== 再上传一个能用的.gif (4253字节)


返回