#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> int main() { int n = 0; scanf("%d" ,&n); int arr[20][20] = {0}; int x = 0,y = 0; int a = 0, b= n-1, c = n-1, d = -1; int i = 1; while( i <= n*n) { arr[x][y] = i; i++; if( x == a && y < b) { if(y == d) { c--; } y++; } else if( y == b && x < c) { if( x == a) { d++; } x++; } else if( x == c && y > d) { if(y == b) { a++; } y--; } else if( y == d && x >a) { if(x == c) { b--; } x--; } } for(int r = 0; r<n ;r++) { for(int j = 0; j<n;j++) { printf("%d " ,arr[r][j]); } printf("\n"); } return 0; }
#include <stdio.h> int main() { int n; int a[20][20]; scanf("%d", &n); //根据n计算要输入的总次数,在循环中设置转弯条件 // 转弯条件:当前方向前方和后方和当前位置的总长度等于n,就转向 // 四个边,都有宽度,走在哪一条边,哪条边就宽度加1 // 还有四个标志,表示当前方向,可以用一个变量表示方向,用switch语句调转 int direction = 1; // 1右 2下 3左 4上 int up = 0, down = 0, right = 0, left = 0; int x=0, y=0; for(int times = 1; times <= n*n;){ switch (direction) { case 1:{ up++; for(int i = 0; left + right + i < n;){ a[x][y] = times; //输入 i++; //记录已走路程 times++; if(left + right + i == n){ direction = 2; x++; break; } //走到头,要转向了 y++; } break; } case 2:{ right++; for(int i = 0; up + down + i < n;){ a[x][y] = times; //输入 i++; //记录已走路程 times++; if(up + down + i == n){ direction = 3; y--; break; } x++; } break; } case 3:{ down++; for(int i = 0; right + left + i < n;){ a[x][y] = times; //输入 i++; //记录已走路程 times++; if(right + left + i == n){ direction = 4; x--; break; } y--; } break; } case 4:{ left++; for(int i = 0; down + up + i < n;){ a[x][y] = times; //输入 i++; //记录已走路程 times++; if(down + up + i == n){ direction = 1; y++; break; } x--; } break; } }; } 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> 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(); } } }