回旋矩阵的算法如何写?

simonf 2007-05-27 10:55:29
回旋矩阵的算法如何写?
例如输入 5 就是输出
1 ,16,15,14 ,13
2 ,17,24,23 ,12
3 ,18,25,22 ,11
4 ,19,20,21 ,10
5 , 6, 7, 8 , 9
例如 输入4 就输出,
1,12,11,10
2,13,16, 9
3,14,15, 8
4, 5, 6, 7
...全文
439 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
romanticwz 2007-06-04
  • 打赏
  • 举报
回复
#include<stdio.h>
main(){
int i=0,j,m,n=1,a=0,k=0;
int c;
c=m=10;
int buf[10][10];
for(k=0;k<m;){
for(i=j=k;j<m;j++){
a++;
buf[j][i]=a;
}

i++;
j--;

for(;i<=j;i++){
a++;
buf[j][i]=a;
}

m--;
i=m;

for(j=m-1;j>=k;j--){
a++;
buf[j][i]=a;
}

i--;
j++;

for(;i>=n;i--){
a++;
buf[j][i]=a;
}

n++;
k++;

}
for(i=0;i<c;i++){
for(j=0;j<c;j++){
printf("%5d",buf[i][j]);
}
printf("\n");
}
return 0;
}
romanticwz 2007-06-04
  • 打赏
  • 举报
回复
#include<stdio.h>
main(){
int i=0,j,m,n=1,a=0,k=0;
int buf[5][5];
int c;
c=m=6;
for(k=0;k<m;){
for(i=j=k;j<m;j++){
a++;
buf[j][i]=a;
}
i++;
j--;
for(;i<=j;i++){
a++;
buf[j][i]=a;
}
m--;
i=m;
for(j=m-1;j>=k;j--){
a++;
buf[j][i]=a;
}
i--;
j++;
for(;i>=n;i--){
a++;
buf[j][i]=a;
}
n++;
k++;

}
for(i=0;i<c;i++){
for(j=0;j<c;j++){
printf("%5d",buf[i][j]);
}
printf("\n");
}
return 0;
}
这个是自己写的,不太好多多饮食。
gracefullee 2007-06-04
  • 打赏
  • 举报
回复
并且:a[j]=m--是这样运算的,先是将m的值赋给a[j],然后m自减1。


gracefullee 2007-06-04
  • 打赏
  • 举报
回复
ls的没看懂我问的是什么??
a[N][N]的话,a[j]是一个地址值,能把一个变量赋值给地址么??
yiqisetian 2007-06-04
  • 打赏
  • 举报
回复
m先减1,然后放到a[j]中,多清楚啊,要是没看懂就看一下运算符优先级,
程序都给出来了,lz还是钻研一下吧,不难的
gracefullee 2007-06-04
  • 打赏
  • 举报
回复
a[j]=m-- ???
这个是怎么赋值的?
看不懂了
simonf 2007-06-02
  • 打赏
  • 举报
回复
好像很复杂,可以说说详细的思路吗?
iu_81 2007-05-27
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<iomanip.h>

void main()
{
const int N=20;
int i=0,j=0,a[N][N],n;
int m,x1,x2,y1,y2,s;
//x1,x2,y1,y2为上、下、左、右边界
//s标记数组元素升降,s==1为升,s==-1为降
while(1)
{
cout<<"\ninput matrix row N(N>=2): ";
cin>>n;
cout<<endl;
if(n>=2)
break;
}
m=n*n;
x1=0;y1=0;x2=n;y2=n;
if(n%2==0)
{j=n-1;y2=n-1;s=1;}
else
{i=n-1;y1=1;s=-1;}
while(1)
{
if(s==1)
{
for(i;i<x2;i++)
a[j]=m--;
i--;j--;x2--;
for(j;j>=y1;j--)
a[j]=m--;
j++;i--;y1++;
s=-1;
}
else
{
for(i;i>=x1;i--)
a[j]=m--;
i++;j++;x1++;
for(j;j<y2;j++)
a[j]=m--;
j--;i++;y2--;
s=1;
}
if(m<1)
break;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<setw(4)<<setiosflags(ios::left)<<a[j];
cout<<endl;
}
cout<<endl;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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