Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication1.cpp : 定義主控台應用程式的進入點。
- //
- #include <stdio.h>
- #include <stdlib.h>
- void R(int**, int, int*, int*, int*);
- void D(int**, int, int*, int*, int*);
- void L(int**, int, int*, int*, int*);
- void U(int**, int, int*, int*, int*);
- int main()
- {
- int i, j, k, num, x;//i為遞增至x之數 j為陣列x維度 k為陣列y維度 x為最大數(num^2)
- while (scanf("%d", &num) != EOF)
- {
- int **a = (int**)malloc(sizeof(int*) * num);
- for (int i = 0; i < num; ++i)
- a[i] = (int*)malloc(sizeof(int) * num);
- for (int i = 0; i < num; i++)//初始化陣列所有值
- {
- for (int j = 0; j < num; j++)
- {
- a[i][j] = 0;
- }
- }
- x = num*num;
- i = 1, j = 0, j = 0;
- while (i <= x)//若值尚未設完
- {
- R((int**)a, num, &i, &j, &k);
- D((int**)a, num, &i, &j, &k);
- L((int**)a, num, &i, &j, &k);
- U((int**)a, num, &i, &j, &k);
- }
- for (int m = 0; m < num; m++)//輸出
- {
- for (int n = 0; n < num; n++)
- {
- printf("%3d", a[i][j]);
- }
- puts("");
- }
- }
- return 0;
- }
- void R(int **a, int num, int *i, int *j, int *k)//向右逐步設值
- {
- while ((*k < num)&&(a[*j][*k + 1] == 0))
- {
- a[*j][*k] = *i;
- *i++;
- *k++;
- }
- }
- void D(int **a, int num, int *i, int *j, int *k)//向下逐步設值
- {
- while (*j<num&&a[*j+1][*k]==0)
- {
- a[*j][*k] = *i;
- *i++;
- *j++;
- }
- }
- void L(int **a, int num, int *i, int *j, int *k)//向左逐步設值
- {
- while (*k >= 0 && a[*j][*k - 1] == 0)
- {
- a[*j][*k] = *i;
- *i++;
- *k--;
- }
- }
- void U(int **a, int num, int *i, int *j, int *k)//向上逐步設值
- {
- while (*j>=0&&a[*j-1][*k]==0)
- {
- a[*j][*k] = *i;
- *j--;
- *i++;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement