사용자에게 2차원 배열의 크기를 입력받고(크기<=100) 다음과 같은 원리로 배열에 숫자를 저장하고 출력하는 프로그램을 제작하세요. (표절 여부 확인합니다.)
>> 20 <- 20이라는 숫자를 넘김
190 210 229 247 264 280 295 309 322 334 345 355 364 372 379 385 390 394 397 399
171 191 211 230 248 265 281 296 310 323 335 346 356 365 373 380 386 391 395 398
153 172 192 212 231 249 266 282 297 311 324 336 347 357 366 374 381 387 392 396
136 154 173 193 213 232 250 267 283 298 312 325 337 348 358 367 375 382 388 393
120 137 155 174 194 214 233 251 268 284 299 313 326 338 349 359 368 376 383 389
105 121 138 156 175 195 215 234 252 269 285 300 314 327 339 350 360 369 377 384
091 106 122 139 157 176 196 216 235 253 270 286 301 315 328 340 351 361 370 378
078 092 107 123 140 158 177 197 217 236 254 271 287 302 316 329 341 352 362 371
066 079 093 108 124 141 159 178 198 218 237 255 272 288 303 317 330 342 353 363
055 067 080 094 109 125 142 160 179 199 219 238 256 273 289 304 318 331 343 354
045 056 068 081 095 110 126 143 161 180 200 220 239 257 274 290 305 319 332 344
036 046 057 069 082 096 111 127 144 162 181 201 221 240 258 275 291 306 320 333
028 037 047 058 070 083 097 112 128 145 163 182 202 222 241 259 276 292 307 321
021 029 038 048 059 071 084 098 113 129 146 164 183 203 223 242 260 277 293 308
015 022 030 039 049 060 072 085 099 114 130 147 165 184 204 224 243 261 278 294
010 016 023 031 040 050 061 073 086 100 115 131 148 166 185 205 225 244 262 279
006 011 017 024 032 041 051 062 074 087 101 116 132 149 167 186 206 226 245 263
003 007 012 018 025 033 042 052 063 075 088 102 117 133 150 168 187 207 227 246
001 004 008 013 019 026 034 043 053 064 076 089 103 118 134 151 169 188 208 228
000 002 005 009 014 020 027 035 044 054 065 077 090 104 119 135 152 170 189 209
#include <stdio.h>
int main() {
int a, i, j, row=0, hello=0;
scanf("%d", &a);
int b[100][100];
int column = a - 1;
while (column >= 0 && row < a) {
i = column, j = row;
while (i < a && j < a) {
b[i][j] = hello++;
i++;
j++;
}
if (column > 0)
column--;
else
row++;
}
for(int k=0; k<a; k++) {
for(j=0; j<a; j++) {
printf("%03d ", b[k][j]);
}
printf("\\n");
}
return 0;
}
패턴은 맨 왼쪽부터 그 위로 하나, 그 오른쪽으로 둘, 그리고 왼쪽 위부터 오른쪽 아래로 대각선으로 1씩 더해집니다.
입력 받은 수 a로 a^2 크기의 정사각형에 2차원 배열에 특정 패턴으로 숫자를 채워넣은 뒤, 이를 출력합니다.
배열의 맨 아랫줄부터 시작하여 대각선으로 상승하면서 0부터 시작하여 1씩 증가하는 숫자를 배열에 채워 넣습니다. 맨 아랫줄부터 시작해서 오른쪽 끝 열까지 이동하면 그뒤에는 맨 왼쪽 열의 맨윗줄 부터 시작해 다시 반복합니다.
colunm 변수를 사용해 출발 점의 열 위치를 조정합니다. 이는 처음에는 배열의 맨 하단에서 시작해서 점차 왼쪽 상단으로 옮겨가며 숫자를 채워넣는 패턴을 구현합니다.
while 루프를 통해 hello 변수의 값을 1씩 증가하면서 대각선 방향으로 배열에 숫자를 대입합니다. column 값이 감소하면서 대각선의 시작 위치를 매번 위로 옮깁니다. row 값은 column이 0이 되었을 때부터 증가하기 시작해 다음 대각선의 축이 됩니다.
이 과정을 반복하면서 전체 배열에 대각선 패턴으로 숫자를 채워 넣습니다.
마지막으로 배열을 순회하면서 결과를 출력합니다.