枫林在线论坛精华区>>程序设计 |
[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 Next y End Sub ************************************************************ ~~~~~~~~~~~~~~~~~~~~ ※作者已于 2003-07-23 17:59:58 修改本文※ ~~~~~~~~~~~~~~~~~~~~ |
||
========== * * * * * ==========
再上传一个能用的.gif (4253字节) |
返回 |