求一个算法

xw8867056 2009-01-01 05:35:20
输入一个整数,打印n*n阶右手旋转方阵,例如 n=4,就输出
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
...全文
159 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
asksgp 2009-01-01
  • 打赏
  • 举报
回复

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n;
cout<<"Please input a number:"<<endl;
cin>>n;

int arr[n][n];
for(int i=0;i<n;i++)
{
for(int k=0;k<n;k++)
{
arr[i][k]=0;
}
}

int num=1;
int u=0,r=n,t=n,w=n-1,v=n-1,s=n-1,m=0;
for(int x=1;x<2*n;x++)
{
if(1==x%4)
{
for(int a=0;a<r;a++)
{ if(0==arr[a][u])
{
arr[a][u]=num;
num++;
}
}
u++;r--;
}
else if(2==x%4)
{
for(int a=0;a<t;a++)
{
if(0==arr[w][a])
{
arr[w][a]=num;
num++;
}
}
w--;t--;
}
else if(3==x%4)
{
for(int a=v;a>=0;a--)
{
if(0==arr[a][v])
{
arr[a][v]=num;
num++;
}
}
v--;
}
else if(0==x%4)
{
for(int a=s;a>0;a--)
{
if(0==arr[m][a])
{
arr[m][a]=num;
num++;
}
}
m++;
s--;
}

}

for(int i=0;i<n;i++)
{
for(int k=0;k<n;k++)
{
cout<<setw(n)<<arr[i][k];
}
cout<<endl;
}

}

submarine2007 2009-01-01
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
int delta_x[4] = {1, 0, -1, 0};
int delta_y[4] = {0, 1, 0,-1};

int main(int argc, char **argv)
{
int x, y;
int direct;
int n,m;
int i,j;

int *matrix;
if(argc != 2)
return 0;

n = atoi(argv[1]);
matrix = (int *)malloc(sizeof(int)*n*n);
m = n;
j = 0;
x=y=0;
direct=0;

for(i = 1; i <= n*n; i++)
{
matrix[n*x + y] = i;

switch(direct)
{
case 0:
if(i == m + j)
{
j += m;
direct++;
}
break;
case 1:
if(i == m - 1 + j)
{
m -= 1;
j += m;
direct++;
}
break;
case 2:
if(i == m + j)
{
j += m;
direct++;
}
break;
case 3:
if(i == m -1 + j)
{
m -= 1;
j += m;
direct = 0;
}
break;
}

x += delta_x[direct];
y += delta_y[direct];
}

for(x = 0; x < n; x++)
{
for(y = 0; y < n; y++)
{
printf("%d ", matrix[n*x+y]);
}
printf("\n");
}

}

yangkunhenry 2009-01-01
  • 打赏
  • 举报
回复

#include <stdio.h>
#define N 4
int a[N][N]={0};
int main()
{
int i=0,j=0;
int n=1;
for(j=0;j<=N/2;j++)
{
for(i=j;i<N-j;i++)
a[i][j]=n++;
for(i=j+1;i<N-j;i++)
a[N-j-1][i]=n++;
for(i=N-j-2;i>=j;i--)
a[i][N-j-1]=n++;
for(i=N-j-2;i>j;i--)
a[j][i]=n++;
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
neeestth 2009-01-01
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <conio.h>
void main()
{
int i=1;
int j=1;
int k=1;
int m=1;
int tmp=0;
int count=0;
int a[4][4]={0};
int time=1;
int n=4;
int flg=0;
int t=n;
int j1=1;
do{
for (i=j1; i<=n; i++) //1 向下依次输入
{
tmp++;
a[i][j1]=tmp;
if(tmp==t*t)
{
flg=1;
break;
}

}
time++;

i--;

for (j1=j1+1; j1<=n; j1++) //2 向右依次输入
{
tmp++;
a[i][j1]=tmp;
if(tmp==t*t)
{
flg=1;
break;
}
}
j1--;

for (i=i-1; i>=1; i--) //3 向上依次输入
{
tmp++;
a[i][j1]=tmp;
if(tmp==t*t)
{
flg=1;
break;
}
}

i++;

for (j1=j1-1; j1>=time; j1--) //4 向左依次输入 一个循环完成
{

tmp++;
a[i][j1]=tmp;
if(tmp==t*t)
{
flg=1;
break;
}

}
j1++;
n--;
}while(flg!=1);

for (m=1; m<=t; m++) //输出矩阵
{
for (k=1; k<=t; k++)
{
printf("%3d",a[m][k]);
}
printf("\n");
}
getch();
}


写了一个但是有问题,看看哪里写错了。
输出是:
1 12 11 10
2 13 16 9
3 14 15 8
16 4 3 7
为什么最下面那行是错的
没弄明白
funnybunny 2009-01-01
  • 打赏
  • 举报
回复
面熟,想想去~
china_west 2009-01-01
  • 打赏
  • 举报
回复
帮顶,
xw8867056 2009-01-01
  • 打赏
  • 举报
回复
怎么没人来,我分太少了可能
xw8867056 2009-01-01
  • 打赏
  • 举报
回复
就是说输入一个整数4,就输出
4*4矩阵
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
xw8867056 2009-01-01
  • 打赏
  • 举报
回复
就是说输入一个整数4,就输出
4*4矩阵
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
breezes2008 2009-01-01
  • 打赏
  • 举报
回复
问题描述详细一点可能更好回答些。
xw8867056 2009-01-01
  • 打赏
  • 举报
回复
不太明白
liyudefly 2009-01-01
  • 打赏
  • 举报
回复
动态建立n*n矩阵往里存数,再输出。。。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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