= 枫林在线; ?>精华区>>程序设计>>C语言 |
[21347] 主题: 一个关于C语言的问题 |
作者: Numino (奥格) | ||
标题:
![]() |
||
来自: 61.129.*.* | ||
发贴时间: 2002年09月26日 17:24:09 (UTC +08:00) | ||
长度: 734字 | ||
如何用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) | ||
标题:
![]() |
||
来自: 61.129.*.* | ||
发贴时间: 2002年09月27日 10:37:41 (UTC +08:00) | ||
长度: 936字 | ||
说一种比较复杂但更具通用性的解题思路:
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 (随便说) | ||
标题:
![]() |
||
来自: 210.22.*.* | ||
发贴时间: 2002年09月27日 21:26:05 (UTC +08:00) | ||
长度: 653字 | ||
#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 (奥格) | ||
标题:
![]() |
||
来自: 203.95.*.* | ||
发贴时间: 2002年10月08日 14:11:14 (UTC +08:00) | ||
长度: 779字 | ||
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*潜航) | ||
标题:
![]() |
||
来自: 61.152.*.* | ||
发贴时间: 2003年07月22日 22:00:09 (UTC +08:00) | ||
长度: 1573字 | ||
晕,离楼上的那一贴也快半年了,不过还是发这贴,用的是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 ************************************************************ |
||
========== * * * * * ==========
再上传一个能用的.gif (4253字节) ![]() |
上级目录 |
Copyright © 2001-2025 枫林在线(www.FengLin.info) All Rights Reserved |