#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, 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 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 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; }
int main() { int arr[50][50] = {0}; int n = 0; scanf("%d",&n); int a = 1; int i = 0; int left = 0;int right = n-1; while (a<=n*n) { for (i = 0; i < n; i++) { if (arr[left][i] == 0) { arr[left][i] = a++; } } for (i = 1; i <= n - 2; i++) { if (arr[i][right] == 0) { arr[i][right] = a++; } } for (i = n - 1; i >= 0; i--) { if (arr[right][i] == 0) { arr[right][i] = a++; } } for (i = n - 2; i >= 1; i--) { if (arr[i][left] == 0) { arr[i][left] = a++; } } left++; right--; } for (i = 0; i < n; i++) { int j = 0; for (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> void Return_matrix(int arr[20][20], int n) { int top = 0; int bottom = n-1; int left = 0; int right = n-1; int i = 0; int j = 0; int sum = 1; while(sum<=n*n) { for(j=left;j<=right;j++) { arr[i][j]=sum; sum++; if(j==right) break; } top++; right--; for(i=top;i<=bottom;i++) { arr[i][j]=sum; sum++; if(i==bottom) break; } bottom--; for(j=right;j>=left;j--) { arr[i][j]=sum; sum++; if(j==left) break; } left++; for(i=bottom;i>=top;i--) { arr[i][j]=sum; sum++; if(i==top) break; } } } int main() { int n = 0; int i = 0; int j = 0; scanf("%d",&n); int arr[20][20]={0}; Return_matrix(arr,n); 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; scanf("%d",&n); int i,j,k; int array[n][n]; int left=0,right=n-1,top=0,bottom=n-1,num=1; while(left<=right&&top<=bottom){ for(int i=left;i<=right;i++){ array[top][i]=num++; } top++; for(int i=top;i<=bottom;i++){ array[i][right]=num++; } right--; for(int i=right;i>=left;i--){ array[bottom][i]=num++; } bottom--; for(int i=bottom;i>=top;i--){ array[i][left]=num++; } left++; } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%d ",array[i][j]); } printf("\n"); } return 0; }
n = int(input()) arr = [ ['']*n for _ in range(n)] value = 1 i = 0 j = n while True: for x in range(i,j+i): arr[i][x] = value value += 1 for y in range(1+i,j+i): arr[y][j-1+i] = value value += 1 for y in range(j-1,0,-1): arr[j-1+i][y-1+i] = value value += 1 for y in range(j-2,0,-1): arr[y+i][i] = value value += 1 j -= 2 i += 1 if j<0: break for i in arr: print(*i) # for j in i: # tem = j if j else "*" # print(f"{tem:<3}",end="")
#include <stdio.h> int main() { int a, b,x=0,y=0,shu=1; scanf("%d",&a); int chan[a][a]; b=a; for (int n=0; n<b; n++) { chan[x][y]=shu; y++; shu++; } y--; for (int n=0; n<a/2; n++) { b--; for (int j=0; j<b; j++) { x++; chan[x][y]=shu; shu++; } for (int j=0; j<b; j++) { y--; chan[x][y]=shu; shu++; } b--; for (int j=0; j<b; j++) { x--; chan[x][y]=shu; shu++; } for (int j=0; j<b; j++) { y++; chan[x][y]=shu; shu++; } } for (int m=0; m<a; m++) { for (int n=0; n<a; n++) { printf("%d ",chan[m][n]); } printf("\n"); } return 0; }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] nums = new int[n][n]; int count = 0; //矩阵数字 int a = 0, b = n - 1; //矩阵位置 while (count < n * n) { for (int i = a; i <= b; i++) { //左--》右 nums[a][i] = ++count; } for (int i = a + 1; i <= b; i++) { // 上--》下 nums[i][b] = ++count; } for (int i = b - 1; i >= a; i--) { // 右--》左 nums[b][i] = ++count; } for (int i = b - 1; i >= a + 1; i--) { //下--》上 nums[i][a] = ++count; } a++; b--;//逐渐收缩 } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(nums[i][j] + " "); } System.out.println(); } } }
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); int arr[50][50]; int i = 0, j = 0; int k = 1; int a = n; int b = n; int count = 0; int ret = 1; if (n != 1) //偶数为奇数且不为1 { while (2 * ret <= a) { while (j < n) // 0行不变,列递增至n-1列 *j变到n-1 { arr[i][j] = k; k++; j++; } j--; i++; //加一行,第n-1列不变,行从1~n-1 *i变到n-1 while (i < n) { arr[i][j] = k; k++; i++; } i--; j--; //减一列,第n-1行不变,列从n-2~0 *j变到0 while (j >= count) { arr[i][j] = k; k++; j--; } j++; i--; //减一行,第0列不变,行从n-2~1 *i变到1 while (i >= ret) { arr[i][j] = k; k++; i--; } i++; j++; //从(1,1)开始 *j变到1 count++; ret++; n--; } if (b % 2 != 0) { arr[(b - 1) / 2][(b - 1) / 2] = k; } } else //特殊n==1 { arr[0][0] = 1; printf("%d", arr[0][0]); } if (b != 1) { for (int u = 0; u < b; u++) { for (int v = 0; v < b; v++) { printf("%d ", arr[u][v]); } printf("\n"); } } 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; } }