来晚了,才发现有call me
—————————————————————————————————————————
123456
131417
216158
111019
怎么办?其实就是将12345678910111213……从外向内螺旋排列,要求输入宽度,高度,螺旋方向(0顺时针,1逆时针)和起始的数字,输出对应矩形。
上面的矩形是由6 4 0 1输出的。
看了1个多小时,做不出来,有下面的一些思路,如果麻烦的话直接给我代码吧,我自己去研究,最好带点注释,谢谢。
——————————————————————————————————————————
首先,我想把1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1变成
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1
于是有了下面
main()
{
int i,j,a[(6*4-10)/2+10],b[6*4];/*即a[17],b[24]*/
for(i=0,j=0;i<17;i++,j++)
{
a[i]=i;
if(a[i]<10)
b[j]=a[i];
else
{b[j]=a[i]/10;b[j+1]=a[i]%10;j++;} /*这个循环就是让2位数拆开变为2个数*/
}
for(j=0;j<24;j++)
printf("%d",b[j]);
}
————————————
得到b[6][4]就是螺旋矩阵的元素,然后我就想再把b矩阵“螺旋”的赋给c[6][4]
问题:怎么让矩阵螺旋
00 01 02 03 04 05
10 11 12 13 14 15
20 21 22 23 24 25
30 31 32 33 34 35
/*矩阵坐标图*/
思路1:b[i][j],i不变,j++;j到达上限/*5*/时,j不变,i++;i上限时,i不变,j--;j到下限时,j不变,i--;后面往内螺旋就是一直循环。其中,遇到上限或下限时,上限和下限值都减1。思路明确了,可是我写的时候不知道如何控制下标
思路2:
1 2
4 3
1 2 3
8 9 4
7 6 5
看这2个矩阵,我感觉可以把上一个矩阵的3移到2后面,4也跟着螺旋过去,就像一条链子摆过去一样。这样,我就觉得n*n矩阵是由n-1*n-1矩阵摆过来的,又想到试试递归,写的时候又不知道怎么控制下标了。
————————————————————————————————————————————————
我看我得多想几个小时了
ps:熬夜的话早上5点40有狮子座流星雨
不知道流星雨姐姐会不会去看流星雨...
[
本帖最后由 pgy 于 2009-11-17 23:56 编辑 ]