/**************************************************************************************
* Function : test
* Create Date : 2014/04/18
* Author : NTSK13
* Email : beijiwei@qq.com
* Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
* 任何单位和个人不经本人允许不得用于商业用途
* Version : V0.1
***************************************************************************************
经典c程序(0022)
题目:把一个杂乱的5X5的数组 转换成一下形式,例子:
4 25 15 8 7 1 2 3 4 5
13 17 21 3 5 16 17 18 19 6
1 9 14 11 24 ==> 15 24 25 20 7
23 2 6 19 20 14 23 22 21 8
10 12 18 16 22 13 12 11 10 9
**************************************************************************************/
#include<stdio.h>
#define MY_FUNC 1
#if MY_FUNC
#define M 5
int data[M][M]={0};
void sort_array();
int main()
{
int i=0,j=0,k=0,ret=0,m=0,result=0,count=0,flag=0; //i,j 作为循环变量;k 作为自增变量 ; ret 作为函数返回值;
//m作为输入变量;result作为输出结果;count 计数变量;flag作为标志位
freopen("input.txt","r",stdin);
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&data[i][j]);
//for(i=0;i<M;i++)
//for(j=0;j<M;j++)
sort_array();
for(i=0;i<M;i++){
for(j=0;j<M;j++){
printf("%d\t",data[i][j]);
fflush(stdout);//修复Eclipse printf()不能显示的小bug
}
printf("\n");
fflush(stdout);//修复Eclipse printf()不能显示的小bug
}
return ret;
}
void sort_array()
{
int start=1,right=0,down=1,left=0,up=0;
int i=0,j=0,k=-1,m=0;
while(data[M/2][M/2] != M*M)
{
while(right<M-i)//to right
{
data[i][right]=start++;
right++;
}
right--;
down=i+1;
while(down<M-j)//to down
{
data[down][right]=start++;
down++;
}
down--;
left=right-1;
while(left>k)//to left
{
data[down][left]=start++;
left--;
}
left++;
up=down-1;
while(up>m)//to up
{
data[up][left]=start++;
up--;
}
up++;
i++;j++;k++;m++;
right=left+1;
down=up;
}
}
/********************************************my function end**************************************************/
#else
int main()
{
return 0;
}
#endif