#include<stdio.h> int main() { int arr[19][19] = {0},n,m,cur = 0; scanf("%d",&n); if(n == 1) printf("1\n"); else { m = n; int count_left = 0,count_right = 0,i = 0,j = 0,count = n / 2; for(int k = 0;k < count;k++) { for(j = count_left;j < m - count_right - 1;j++) arr[i][j] = ++cur; for(i = count_left;i < n - count_right - 1;i++) arr[i][j] = ++cur; for(;j > count_left;j--) arr[i][j] = ++cur; for(;i > count_left;i--) arr[i][j] = ++cur; i += 1; count_left++; count_right++; } if(n % 2) arr[i][j + 1] = n*m; for(i = 0;i < n;i++) { for(j = 0;j < m;j++) printf("%d ",arr[i][j]); printf("\n"); } } return 0; }
#include<stdio.h> int main() { int n = 0; scanf("%d",&n); int i = 0; int a = n,b = 0;//上界左界、下界右界 int flag = 1; int arr[19][19]={0}; int x = 0,y = 0; for(i=1;i<=n*n;i++) { if(flag == 1)//往右走 { arr[x][y]=i; y++; } else if(flag==2)//往下走 { arr[x][y]=i; x++; } else if(flag==3)//往左走 { arr[x][y]=i; y--; } else if(flag==4)//往上走 { arr[x][y]=i; x--; } if(y==a-1&&x==b)//碰到右界,开始往下走 { flag = 2; } else if(x==a-1&&y==a-1)//碰到下界,开始往左走 { flag = 3; } else if(y==b&&x==a-1)//碰到左界,开始往上走,一圈完 { flag = 4; b++; a--; } else if(x==b&&y==(b-1))//碰到上界,开始往右走 { flag = 1; } } int j = 0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%d ",arr[i][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main(){ int n, i, a[20][20]; scanf("%d", &n); int count = 0; int s = 0, f = n - 1; while(count < n * n){ for(i = s; i <= f; i++) //左 --> 右 a[s][i] = ++count; for(i = s + 1; i <= f; i++) //上 --> 下 a[i][f] = ++count; for(i = f - 1; i >= s; i--) //右 --> 左 a[f][i] = ++count; for(i = f - 1; i >= s + 1; i--) //下 --> 上 a[i][s] = ++count; s++;f--; //缩 } for(i = 0; i < n; i++){ for(int j = 0; j < n; j++){ printf("%d ", a[i][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main() { int arr[20][20]; memset(arr, 0, sizeof(arr)); int n = 0; int i = 0; int count = 1; scanf("%d", &n); int start = 0; int finish = n - 1; while (count <= n * n) { for (i = start; i <= finish; i++) arr[start][i] = count++; for (i = start + 1; i <= finish; i++) arr[i][finish] = count++; for (i = finish - 1; i >= start; i--) arr[finish][i] = count++; for (i = finish - 1; i >= start + 1; i--) arr[i][start] = count++; start++; finish--; } for (i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }
#include<iostream> int main() { int n; std::cin >> n; int arr[n][n]; int l = -1, r = n - 1, u = 0, d = n - 1, val = 1; while (val <= n * n) { for (int i = ++l; i <= r; ++i) arr[u][i] = val++; for (int i = ++u; i <= d; ++i) arr[i][r] = val++; for (int i = --r; i >= l; --i) arr[d][i] = val++; for (int i = --d; i >= u; --i) arr[i][l] = val++; } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) printf("%d ", arr[i][j]); printf("\n"); } return 0; }
#include <stdio.h> int main() { int n; scanf("%d", &n); int left = 1, right = n, top = 1, down = n; //边界 int x = 1, y = 1; //坐标 int i; int arr[20][20]; int directiontoleft = 0,directiontoright = 1, directionup = 0, directiondown = 0; //方向 for (i = 1; i <= n * n; i++) { arr[x][y] = i; if (y == top && x != right && directiontoright ==1) { x += 1; if (x == right) { directiontoright = 0; directiondown = 1; top += 1; } } else if (x == right && y != down && directiondown == 1) { y += 1; if (y == down) { directiondown = 0; directiontoleft = 1; right -= 1; } } else if (y == down && x != left && directiontoleft == 1) { x -= 1; if (x == left) { directiontoleft = 0; directionup = 1; down -= 1; } } else if (x == left && y != top && directionup == 1) { y -= 1; if (y == top) { directionup = 0; directiontoright = 1; left += 1; } } } for (int j = 1; j <= n; j++) { for (int k = 1; k <= n; k++) { printf("%d ", arr[k][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main() { int n = 0,k = 1,arr[20][20] = {0}; scanf("%d",&n); int i = 0,i2 = 0,j = 0,j2 = 0,i3 = 0; for(i = 1;i<=n;i++) { for(j = i;j<=n;j++)//从左到右 { if(arr[i][j]==0) arr[i][j] = k++; else//在需要的时候停下,并记录j { break; } } j--;//注意上面的j多走了一格 for(i2 = i+1;i2<=n;i2++)//从上到下 { if(arr[i2][j]==0) arr[i2][j] = k++; else//在需要的时候停下,并记录i2 { break; } } i2--;//注意上面的i2多走了一格 for(j2 = j-1;j2>=1;j2--)//从右到左 { if(arr[i2][j2]==0) arr[i2][j2]=k++; else//在需要的时候停下,并记录j2 { break; } } j2++;//注意上面的j2多走了一格 for(i3 = i2-1;i3>i;i3--)//从下到上 { if(arr[i3][j2]==0) arr[i3][j2] = k++; else//在需要的时候停下,并记录i3 { break; } } i3++;//注意上面的i3多走了一格 } for(i = 1;i<=n;i++)//输出 { for(j = 1;j<=n;j++) { printf("%d ",arr[i][j]); } printf("\n"); } return 0; }
#include <iostream> #include <iomanip> using namespace std; void right(int n){ for(int i=0;i<n;i++){ } } int main() { int n,val=1; cin>>n; if(n==1){//emmmm 特事特办 cout<<'1'; return 0; } int a[20][20]; int i=0,j=0; for(int step=n-1,p=0;2*p<n;p++){//将回型矩形看成一个圈套一个圈,n为偶数,n/2圈,n为奇数剩一个数 for(int q=0;q<step;q++){//向右:二维数组行(i)不变,列(j)递增 a[i][j]=val; j++; val++; } for(int q=0;q<step;q++){//向下:二维数组行(i)递增,列(j)不变 a[i][j]=val; i++; val++; } for(int q=0;q<step;q++){//向左:二维数组行(i)不变,列(j)递减 a[i][j]=val; j--; val++; } for(int q=0;q<step;q++){//向右:二维数组行(i)递减,列(j)不变 a[i][j]=val; i--; val++; } step-=2;//每完成一圈下一圈边长减二 //调整下一圈起始位置 i++; j++; while(!step){//补齐n为奇数时最后一个数 if(n%2){ a[i][j]=val; break; } } } i=0,j=0;//循环打印 for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } //system("pause"); return 0; }
搜索
复制
#include <stdio.h> int main() { int n,a[20][20],count=1; scanf("%d",&n); int col=0,row=0;//控制行和列 while(count<=n*n){ for(int i=col;i<n-col;i++)a[row][i]=count++; for(int j=row+1;j<n-row;j++)a[j][n-col-1]=count++; for(int i=n-col-2;i>=col;i--)a[n-row-1][i]=count++; for(int j=n-row-2;j>row;j--)a[j][col]=count++; col++; row++;//以一圈为一次循环 } for(int i=0;i<n;i++){ for(int j=0;j<n;j++)printf("%d ",a[i][j]); printf("\n"); } return 0; }
#include <stdio.h> #include <stdlib.h> void clock_Wise(int p[][19], int left, int right, int serialNum); int main() { int n, count = 1; scanf("%d", &n); int arr[19][19]; clock_Wise(arr, 0, n - 1, 1); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; } void clock_Wise(int p[][19], int left, int right, int serialNum){ int row = left, column = left; if(left < right){ for(; column < right; column++){ p[row][column] = serialNum++; } for(; row < right; row++){ p[row][column] = serialNum++; } for(; column > left; column--){ p[row][column] = serialNum++; } for(; row > left; row--){ p[row][column] = serialNum++; } clock_Wise(p, left + 1, right - 1, serialNum); } else if (left == right) { p[row][column] = serialNum; } }
package main import ( "fmt" ) func main() { var n int fmt.Scan(&n) matrix := make([][]int, n) for i := 0; i < n; i++ { matrix[i] = make([]int, n) } x := 1 l, r, u, d := 0, n-1, 0, n-1 for x <= n*n { // 向右走 for i := l; i <= r; i++ { matrix[u][i] = x x++ } // 向下走 for i := u+1; i <= d; i++ { matrix[i][r] = x x++ } // 向左走 for i := r-1; i >= l; i-- { matrix[d][i] = x x++ } // 向上走 for i := d-1; i > u; i-- { matrix[i][l] = x x++ } l, r, u, d = l+1, r-1, u+1, d-1 } for i := 0; i < n; i++ { for j := 0; j < n; j++ { fmt.Printf("%d ", matrix[i][j]) } fmt.Println() } }
#include <stdio.h> int main() { int N,n,num=1; int a[20][20]={0}; scanf("%d",&N); if(N%2!=0) a[N/2][N/2]=N*N; for(int n=0;n<N/2;n++) { for(int j=n;j<N-n-1;j++) { a[n][j]=num++; } for(int i=n;i<N-n-1;i++) { a[i][N-n-1]=num++; } for(int j=N-n-1;j>=n+1;j--) { a[N-n-1][j]=num++; } for(int i=N-n-1;i>=n+1;i--) { a[i][n]=num++; } } for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { printf("%5d",a[i][j]); } puts("\n"); } return 0; }
#include <stdio.h> //太难了 void test(int arr[19][19], int n, int* l, int* count) { int d = 1; int i = 0; int a = 1; int j = 0; int b = 1; int c = 1; for (i = 0+ *l; i < n+ *l; i++) { if (*l ==0) { if (i == 0) { for (j = 0 + *l; j < n; j++) { if (j == 0 + *l) { arr[i][j] = arr[0][0]; } else if (j >= 1 && j <= n - 1) { arr[i][j] = arr[i][j - 1] + d; } } } else if (i >= 1 && i <= n -2) { int z = n - 1; arr[i][z] = arr[0][n - 1] + a; a++; } while (i == n - 1 && n>=2) { int k = 0; for (k = n - 1; k >= 0; k--) { arr[i][k] = arr[n - 2][n - 1] + b; b++; } int t = 0; for (t = n - 2; t > 0; t--) { arr[t][0] = arr[n - 1][0] + c; c++; } (*l)++; if (i == n - 1) { break; } } if (i == n - 1) { break; } } else if (*l != 0) { if (i == *l) { for (j = 0 + *l; j < n + *l; j++) { if (j == *l) { arr[i][j] = arr[i][i - 1] + 1; } else if (j >= 1 + *l && j <= n + *l - 1) { arr[i][j] = arr[i][j - 1] + d; } } } if (n - 2 > 0) { if ((i >= 1 + *l && i <= n - 3 + (*count))) { int z = 0;//7-6 5-5 3-4 6-5 4-4 2-3 z = n - 2 +(*count); arr[i][z] = arr[*l][z] + a; a++; } } while (i == n-2+(*count))//2->1 4->2 6->3 8->4 10-9 8-8 6-7 4-6 2-5 { int k = 0; if (n >= 2) { for (k = n - 2 + (*count); k >= *count - 1; k--) { arr[i][k] = arr[n - 3 + (*count)][n - 2 + (*count)] + b;// 4-3 2-3 b++; } } else { arr[i][i] = arr[i][i - 1]+1; } if (n > 2 ) { int t = 0; for (t = n - 3 + *count; t > *l; t--)//5-4\3 3-3 { arr[t][0 + *l] = arr[n-2+*count][0 + *l] + c; c++; } } (*l)++; if (i == n - 2 + (*count)) { break; } } if (i == n - 2 + (*count)) { break; } } } if ((n - 2) > 0) { (*count)++; test(arr, n - 2, l,count); } } int main() { int count = 1; int l = 0; int arr[19][19] = { 0 }; arr[0][0] = 1; int n = 0; scanf("%d", &n); test(arr, n, &l, &count); int v = 0; for (v = 0; v < n; v++) { int h = 0; for (h = 0; h < n; h++) { printf("%d ", arr[v][h]); } printf("\n"); } return 0; }