数字矩阵

博客围绕输出N*N的数字旋转方阵展开,先定义二维数组,分析方阵每层规律,如最外层从1到20等。将问题拆分,先实现最外层,每层由四条边组成,相邻边有一点重合。还给出了实现该方阵的C语言代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数字矩阵 输出N*N的数字旋转方阵 首先我们先定义一个二位数组 int a [N][N];
在这里插入图片描述
我们很明显的能够看出规律,最外层 依次从1~20 第二层依次从21 ~32 第三层从 33 ~ 到36,如何程序描述这个呢?首先我们把问题拆分一下先实现最外层 ,,每一层都有四个条边组成,而且相邻两个边(导致有一个点重合)所以我,我们让第一层每 每条边赋值N-1个点 最外层实际有(N-1)*4个点从(0,0)开始, 第二层从(1,1)有(N-3)*4 对相信各位朋友都有了想法了 我们中的两种方法意思都是一样的,希望可以给带来帮助大家

#include<stdio.h>
#define N 10 //必须是方阵
int a[N][N];
int count=0;
int print(){
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
int fun(int pos ,int s){//我觉得算法题最重要的是自己的思维 很多时候我们能够发现数据之间的规律
if(s0){
return 0;
}
if(s
1){ //当N为奇数的时候最内的一层为只有一个点
a[pos][pos]=++count;
return 1;
}
int i=pos,j=pos;// 每一层开始的起点
for(i;i<s-1+pos;i++){
a[i][j]=++count;
}
for(j;j<s-1+pos;j++){
a[i][j]=++count;
}
for(i;i>=pos+1;–i){
a[i][j]=++count;
}
for(j;j>=1+pos;–j){
a[i][j]=++count;
}
/int i=pos,j=pos;
for(int k=0;k<s-1;k++){ //这种方法是每一层的行列的点个数都是固定的 改变的i,j的值
a[i++][j]=++count;
}
for(int k=0;k<s-1;k++){
a[i][j++]=++count;
}
for(int k=0;k<s-1;k++){
a[i–][j]=++count;
}
for(int k=0;k<s-1;k++){
a[i][j–]=++count;
}
/
fun(pos+1,s-2); //s-2 是因为每向内进一层减少的上下和左右两边 pos是每一层开始的点
}
int main(){
fun(0,N);
print();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值