您的位置:首页 > 其它

旋转方阵问题

2010-03-20 12:32 267 查看
#include <iostream>
#include <stdlib.h>
#define LEN 20

void fun1(int (&a)[LEN][LEN],int n)
{
int i,j,m;
int s,t;
t=0;
m=n/2;
if(n%2==1) a[m+1][m+1]=n*n;
for(i=1;i<=m;i++)
{
s=n-2*i+1;
for(j=i;j<=n-i;j++)
{
a[i][j]=t+1-i+j;
a[j][n+1-i]=t+1-i+j+s;
a[n+1-i][j+1]=t+3*s-j+i;
a[j+1][i]=t+4*s-j+i;
}
t+=4*s;
}
}

void fun2(int (&a)[LEN][LEN],int n)
{
int i,j,m;
int s,t;
t=0;
m=n/2;
if(n%2==1) a[m+1][m+1]=n*n;
for(i=1;i<=m;i++)
{
s=n-2*i+1;
for(j=i;j<=n-i;j++)
{
a[j][i]=t+1-i+j;
a[n+1-i][j]=t+1-i+j+s;
a[j+1][n+1-i]=t+3*s-j+i;
a[i][j+1]=t+4*s-j+i;
}
t+=4*s;
}

}

void fun3(int (&a)[LEN][LEN],int n)
{
int i,j,m;
int s,t;
t=0;
m=n/2;
if(n%2==1) a[m+1][m+1]=n*n;
for(i=1;i<=m;i++)
{
s=n-2*i+1;
for(j=i;j<=n-i;j++)
{
if(i%2)
{
a[i][j]=t+1-i+j;
a[j][n+1-i]=t+1-i+j+s;
a[n+1-i][j+1]=t+3*s-j+i;
a[j+1][i]=t+4*s-j+i;
}
else
{a[j][i]=t+1-i+j;
a[n+1-i][j]=t+1-i+j+s;
a[j+1][n+1-i]=t+3*s-j+i;
a[i][j+1]=t+4*s-j+i;
}
}
t+=4*s;
}
}

void fun4(int (&a)[LEN][LEN],int n)
{
int i,j,m;
int s,t;
t=0;
m=n/2;
if(n%2==1) a[m+1][m+1]=n*n;
for(i=1;i<=m;i++)
{
s=n-2*i+1;
for(j=i;j<=n-i;j++)
{
if(i%2==0)
{
a[i][j]=t+1-i+j;
a[j][n+1-i]=t+1-i+j+s;
a[n+1-i][j+1]=t+3*s-j+i;
a[j+1][i]=t+4*s-j+i;
}
else
{a[j][i]=t+1-i+j;
a[n+1-i][j]=t+1-i+j+s;
a[j+1][n+1-i]=t+3*s-j+i;
a[i][j+1]=t+4*s-j+i;
}
}
t+=4*s;
}
}

int main(int argc, char *argv[])
{
int i,j,n,a[LEN][LEN];
int p; /////e用于标记选择操作
cout<<"1:顺转N阶方阵"<<endl
<<"2:逆转N阶方阵"<<endl
<<"3:顺逆转方阵"<<endl
<<"4:逆顺转方方阵"<<endl;
cout<<"请输入你的方阵选择:"<<endl;
cin>>p;
cout<<"输入你的方阵数N:"<<endl;
cin>>n;
switch (p)
{
case 1: fun1(a,n); cout<<"顺转N阶方阵"<<endl; break;
case 2: fun2(a,n);cout<<"顺转N阶方阵"<<endl; break;
case 3: fun3(a,n);cout<<"顺逆转N阶方阵"<<endl; break;
case 4: fun4(a,n);cout<<"逆顺转N阶方阵"<<endl; break;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
system("PAUSE");
return 0;
}

四种基本思路一致,只是因为时间关系,还没进行简洁改正,显得特别罗嗦,下次有时间再进行改正了。。

匆忙之间,还得去参加会议。

其中i 指的是方阵转的圈数,J表示对第I圈数的条边的N-2*I+1个元素操作。

顺转和逆转的操作只是将行列互换,

顺逆操作奇数圈操作同顺方阵。偶数圈同逆转方阵。。

逆顺操作同顺转操作行列互换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: