蛇形数阵
作者 于延
单位 哈尔滨师范大学
任务描述
编程输入一个正整数N(N<15),输出N阶蛇形数阵,输出格式见样例。
输入样例:
5
输出样例:(每个数字占3列,每个数字后一个空格)
001 002 003 004 005
010 009 008 007 006
011 012 013 014 015
020 019 018 017 016
021 022 023 024 025
输入样例:
15
输出样例:(每个数字占3列,每个数字后一个空格)
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015
030 029 028 027 026 025 024 023 022 021 020 019 018 017 016
031 032 033 034 035 036 037 038 039 040 041 042 043 044 045
060 059 058 057 056 055 054 053 052 051 050 049 048 047 046
061 062 063 064 065 066 067 068 069 070 071 072 073 074 075
090 089 088 087 086 085 084 083 082 081 080 079 078 077 076
091 092 093 094 095 096 097 098 099 100 101 102 103 104 105
120 119 118 117 116 115 114 113 112 111 110 109 108 107 106
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
150 149 148 147 146 145 144 143 142 141 140 139 138 137 136
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
180 179 178 177 176 175 174 173 172 171 170 169 168 167 166
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
210 209 208 207 206 205 204 203 202 201 200 199 198 197 196
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
我的答案:
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
int b[n][n];
int k=1;
for (int i=0;i<n;i++)
{
if (i % 2 == 0)
{
for (int j=0 ;j<n;j++)
{
b[i][j] = k++;
}
}
else
{
for (int j=n-1 ;j>=0;j--)
{
b[i][j] = k++;
}
}
}
for (int i=0;i<n;i++)
{
printf("%03d",b[i][0]);
for(int j=1;j<n;j++)
{
printf(" %03d",b[i][j]);
}
printf("\n");
}
return 0;
}
1、突破口:偶数行的是依次增加,奇数行依次递减
我们通过一个if -else条件判断,来实现两个相反的内部for循环
但是,蛇形增加的元素从哪里?
于是有了k这个由1开始的变量
这就有两条同时变化又相关的线,让数组的下标和值一一对应
int n;
scanf("%d",&n);
int b[n][n];
int k=1;
for (int i=0;i<n;i++)
{
if (i % 2 == 0)
{
for (int j=0 ;j<n;j++)
{
b[i][j] = k++;
}
}
else
{
for (int j=n-1 ;j>=0;j--)
{
b[i][j] = k++;
}
}
}
2、输出结果有两个问题:
第一个是跟之前那个图像模糊处理的问题一样,每行最后没有空格
这个我们通过把每行第一个数特殊处理来解决
第二个问题是"%03d"的运用
“3”表示每个数占3列,如果不足3位数,右对齐,左边用空格补位;如果想要左对齐,数字前加一个负号
比如:"%3d" : 3 --> ··3
“%-3d” : 3 --> 3··
‘0’的作用是把空格变为0
比如:"%03d" :3 --> 003
for (int i=0;i<n;i++)
{
printf("%03d",b[i][0]);
for(int j=1;j<n;j++)
{
printf(" %03d",b[i][j]);
}
printf("\n");
}