| 枫林在线精华区>>程序设计>>C语言 |
| [21347] 主题: 一个关于C语言的问题 |
| 作者: Numino (奥格) | ||
标题:
一个关于C语言的问题
|
||
| 来自: 61.129.*.* | ||
| 发贴时间: 2002年09月26日 17:24:09 (UTC +08:00) | ||
| 长度: 735字 | ||
如何用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 (UTC +08:00) | ||
| 长度: 937字 | ||
说一种比较复杂但更具通用性的解题思路:
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 (UTC +08:00) | ||
| 长度: 654字 | ||
#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 (UTC +08:00) | ||
| 长度: 780字 | ||
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 (UTC +08:00) | ||
| 长度: 1575字 | ||
晕,离楼上的那一贴也快半年了,不过还是发这贴,用的是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 |