矩阵算法

cy_i_lh 2007-12-04 02:49:09
输入 n= 3 要求输出矩阵 n*n
1 2 3
8 9 4
7 6 5

输入 n= 4 要求输出
1 2 3 4
14 15 16 5
11 12 13 6
10 9 8 7
...全文
204 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Aaron_Jerry 2007-12-04
  • 打赏
  • 举报
回复
看错了 不好意思
不过我想思路应该还是差不多的。
Aaron_Jerry 2007-12-04
  • 打赏
  • 举报
回复
1的位置是固定的(0,0),行进方向:右->下->左->上,在每个方向上找出行进步数的规律就可以了。
按照这种思路的代码如下:

#include <stdio.h>

#define N 5 //控制矩阵大小

int matrix[N][N];
int row_num,col_num;
int number;

int way; //行进方向
int right=1; //行进次数
int down=1;
int left=1;
int up=1;

void turn_right();
void turn_down();
void turn_left();
void turn_up();

void main()
{
int i,j;
while(number < N*N)
{
switch(way)
{
case 0:
turn_right();
break;
case 1:
turn_down();
break;
case 2:
turn_left();
break;
case 3:
turn_up();
break;
default:
break;
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%-4d",matrix[i][j]);
printf("\n");
}
}

void turn_right()
{
int j;
int col=col_num;
if(row_num==0 && col_num==0)
{
for(j=col;j<=N-right;j++)
matrix[row_num][j]=++number;
col_num=col+N-1;
}
else
{
for(j=col+1;j<=col+N-2*(right-1);j++)
matrix[row_num][j]=++number;
col_num=col+N-2*(right-1);
}
right++;
way=1;
}

void turn_down()
{
int i;
int row=row_num;
for(i=row+1;i<=row+N-(2*down-1);i++)
matrix[i][col_num]=++number;
row_num=row+N-(2*down-1);
down++;
way=2;
}

void turn_left()
{
int j;
int col=col_num;
for(j=col-1;j>=col-(N-(2*left-1));j--)
matrix[row_num][j]=++number;
col_num=col-(N-(2*left-1));
left++;
way=3;
}

void turn_up()
{
int i;
int row=row_num;
for(i=row-1;i>=row-(N-2*up);i--)
matrix[i][col_num]=++number;
row_num=row-(N-2*up);
up++;
way=0;
}
ar_2002 2007-12-04
  • 打赏
  • 举报
回复
规律有点岐义 如当n为5时
1 2 3 4 5
22 23 24 25 6
18 19 20 21 7
14 15 16 17 8
13 12 11 10 9

1 2 3 4 5
25 24 24 22 6
18 19 20 21 7
14 15 16 17 8
13 12 11 10 9
是哪种?

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧