读书人

数组旋转,该如何处理

发布时间: 2012-04-17 15:06:33 作者: rapoo

数组旋转
谁有算法?将一个一维数组按长128宽8的方式旋转180度存储???


[解决办法]

C/C++ code
//将一个一维长度10的数组按长5宽2的方式旋转180度存储???//一维长度10的数组://0 1 2 3 4 5 6 7 8 9//长5宽2://0 1 2 3 4//5 6 7 8 9//旋转180度://9 8 7 6 5//4 3 2 1 0#include <stdio.h>#define ALEN 10 //1024#define BWIDTH 5 //128#define BHEIGHT 2 //8int a[ALEN];int b[BHEIGHT][BWIDTH];int y,x,i;void main() {    for (i=0;i<ALEN;i++) a[i]=i;    i=0;    for (y=BHEIGHT-1;y>=0;y--) {        for (x=BWIDTH-1;x>=0;x--) {            b[y][x]=a[i];            i++;        }    }    for (y=0;y<BHEIGHT;y++) {        for (x=0;x<BWIDTH;x++) {            printf("%d ",b[y][x]);        }        printf("\n");    }}
[解决办法]
可以使用交换的思想:
设定一个元素为初始元素为基准,如果它的下标为i,通过i的值,可以算出旋转后的位置,两个元素交换
设定交换过来的元素为基准,循环上面的操作,至128*8次
counter=0;index=0;//counter用作计数 index表示基准元素下标
while (counter<128*8)
{
tmp1 = a[index]/128;
tmp2 = a[index]%128;
tmp3 = tmp1+tmp2*128;
if ( tmp3 == index )
{
index++;//如果某个元素不应该交换位置,则说明index位置的元素已经确定了,应更换index
}
else
{
swap_tmp = a[index];
a[index] = a[swap_tmp];
a[tmp4] = swap_tmp;
counter++;//每次交换表示有一个元素找到了旋转后的位置
}
}
[解决办法]
我把写有数组的纸倒过来看.....
奇怪,是这样吗?
main()
{
int a[1024],b[8][128],m=1024,i,j;
for(i=0;i<8;i++)
for(j=0;j<128;j++)
b[i][j]=a[--m];
}

读书人网 >C语言

热点推荐