#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();
}
}
}