짝수 문자열을 거꾸로 인쇄하지만 일반적인 방식으로 짝수 문자열이 아닌 배열을 인쇄하려고합니다. 내가 뭘 잘못 했어? 예를 들면 :
1 0 3
9 7 3
5 7 8
그리고 나는 그것을 필요로한다 :
1 0 3
3 7 9
5 7 8
하지만 나도 나선 방식으로 배열을 채우는 데 문제가 있습니다. 어레이의 중심을 어떻게 가져야합니까? 제발, 아이디어를 주시겠습니까? 어떻게해야합니까? 그리고 배열은 정사각형이어야합니다. 예를 들면 :
1 2 3
4 5 6
7 8 9
그러나 나는 그것을 필요로한다 :
3 2 9
4 1 8
5 6 7
지금까지 내 코드 :
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10][10],n,m,i,j;
printf("Enter m: ");
scanf("%d",&m);
printf("Enter n: ");
scanf("%d",&n);
for(i=0;i<m;i++){
for(j=0;j<m;j++){
printf("a[%d][%d]: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
// in usual order
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(i%2 != 0){
printf("%d ",a[i][j]);
}
else {
printf("%d ",a[n-i+1][j]);
}
}
printf("\n");
}
return 0;
}
다음은 spiral_fill()
정사각형 배열을 int
중심에서 1부터 시작하여 시계 반대 방향으로 나선으로 진행하는 순차 s로 채우는 함수를 포함하는 프로그램입니다 . 이 함수는 먼저 1
중앙에 a 를 저장 한 다음 위와 왼쪽, 아래와 오른쪽에있는 L 자형 영역을 채우고 배열이 채워질 때까지 계속 하여 배열을 채 웁니다 .
#include <stdio.h>
#define ARR_SZ 3
void spiral_fill(size_t arr_sz, int arr[arr_sz][arr_sz]);
void print_arr(size_t rows, size_t cols, int arr[rows][cols]);
int main(void)
{
int test_arr[ARR_SZ][ARR_SZ];
spiral_fill(ARR_SZ, test_arr);
print_arr(ARR_SZ, ARR_SZ, test_arr);
return 0;
}
void spiral_fill(size_t arr_sz, int arr[arr_sz][arr_sz])
{
int center = arr_sz / 2;
int current = center;
int start_col, stop_col, start_row, stop_row;
size_t layer = 0;
int next_val = 1;
arr[center][center] = next_val++;
++layer;
while (layer < arr_sz) {
if (layer % 2) { // For odd layers, fill upper L
current -= layer;
start_col = center + layer / 2;
stop_col = center - (layer + 1) / 2;
for (int j = start_col; j >= stop_col; j--) {
arr[current][j] = next_val++;
}
start_row = center - layer / 2;
stop_row = center + layer / 2;
for (int i = start_row; i <= stop_row; i++) {
arr[i][current] = next_val++;
}
++layer;
} else { // For even layers, fill lower L
current += layer;
start_col = center - layer / 2;
stop_col = center + layer / 2;
for (int j = start_col; j <= stop_col; j++) {
arr[current][j] = next_val++;
}
start_row = center + (layer - 1) / 2;
stop_row = center - layer / 2;
for (int i = start_row; i >= stop_row ; i--) {
arr[i][current] = next_val++;
}
++layer;
}
}
}
void print_arr(size_t rows, size_t cols, int arr[rows][cols])
{
for (size_t i = 0; i < rows; i++) {
for (size_t j = 0; j < cols; j++) {
printf("%-5d ", arr[i][j]);
}
putchar('\n');
}
}
다음은 3X3 어레이입니다.
3 2 9
4 1 8
5 6 7
다음은 6X6 어레이입니다.
31 30 29 28 27 26
32 13 12 11 10 25
33 14 3 2 9 24
34 15 4 1 8 23
35 16 5 6 7 22
36 17 18 19 20 21
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다