1.题目内容:
观察下图中的各行列数字的排列规律,编写一个C程序,将图中的数字(20 行、 20列)存入一个二维数组中,并按行列方式输出所有元素
2、算法设计
1.首先要解决1,2 ,3,4……输入数组的问题,首先元素存入数组时不是,按行列顺序储存,而是蛇形输入,所以应找出其中的规律,可以发现每一轮输入是以a[i][j]中i和j之和决定的,例如i+j=0为第1轮,i+j为1为第2轮,由此类推,其中每一次轮回j的值会递减,但i+j之和一直为i;
2.要解决蛇形输入还应解决a[][]中首位相继的问题,这里我们可以设置一个方向变量x,如果x为-1按其中的某中方式运行,如果为1则按另一种方式输入
3.最后一个问题便是将数组按三角型的样子输出
3.源代码
#include <stdio.h>
void main()
{
int i, j;
int count = 1;
int a[20][20];
int bx=-1;
for (i = 0;i <= 19;i++)
{
if (bx ==1)
{
for (j = 0;j <= i;j++)
{
a[j][i - j] = count;
count++;
}
}
if (bx == -1)
{
if (bx = -1)
{
for (j = 0;j <= i;j++)
{
a[i-j][j] = count;
count++;
}
}
}
bx = bx * -1;
}
for (i = 0;i <= 19;i++)
{
for (j = 0;j <= 19 - i;j++)
{
printf("%-4d",a[i][j]);
}
printf("\n");
}
}
4.代码结果:
1 2 6 7 15 16 28 29 45 46 66 67 91 92 120 121 153 154 190 191
3 5 8 14 17 27 30 44 47 65 68 90 93 119 122 152 155 189 192
4 9 13 18 26 31 43 48 64 69 89 94 118 123 151 156 188 193
10 12 19 25 32 42 49 63 70 88 95 117 124 150 157 187 194
11 20 24 33 41 50 62 71 87 96 116 125 149 158 186 195
21 23 34 40 51 61 72 86 97 115 126 148 159 185 196
22 35 39 52 60 73 85 98 114 127 147 160 184 197
36 38 53 59 74 84 99 113 128 146 161 183 198
37 54 58 75 83 100 112 129 145 162 182 199
55 57 76 82 101 111 130 144 163 181 200
56 77 81 102 110 131 143 164 180 201
78 80 103 109 132 142 165 179 202
79 104 108 133 141 166 178 203
105 107 134 140 167 177 204
106 135 139 168 176 205
136 138 169 175 206
137 170 174 207
171 173 208
172 209
210