问题描述
对于一个二维数组,最外圈赋值1,第二圈赋值2,以此类推。
解法
一个元素所处圈数与其距边缘的距离正相关,直接套公式即可。
#include <stdio.h>
#define MAX_SIZE 10
int min (int a, int b, int c, int d) ;
void arr_creat(int arr[MAX_SIZE][MAX_SIZE]);
void arr_out(int arr[MAX_SIZE][MAX_SIZE]);
int main() {
int arr[MAX_SIZE][MAX_SIZE];
arr_creat(arr);
arr_out(arr);
return 0;
}
/*function definition*/
int min (int a, int b, int c, int d) {
a = a < b ? a : b;
a = a < c ? a : c;
a = a < d ? a : d;
return a;
}
void arr_creat(int arr[MAX_SIZE][MAX_SIZE]) {
for (int i = 0; i < MAX_SIZE; i++) {
for (int j = 0; j < MAX_SIZE; j++) {
arr[i][j] = min(i, j, MAX_SIZE-1-i, MAX_SIZE-1-j) + 1;//distance to edge + 1
}
}
}
void arr_out(int arr[MAX_SIZE][MAX_SIZE]) {
for (int i = 0; i < MAX_SIZE; i++) {
for (int j = 0; j < MAX_SIZE; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}