您的位置:首页 > 其它

自己编写的奇数宫格程序

2012-03-24 22:38 148 查看
#include"stdio.h"

#include"malloc.h"

void main()

{

int n,m,j,*elem;



printf("输入宫格数(奇数):");

scanf("%d",&n);

m=n*n;

elem=(int*)malloc(n*n*sizeof(int));//开辟可以存储宫格数的数组大小

for(int*p=elem;p<elem+m;p++)

*p=0; //将所有的位置放置0

p=elem; //将p指向数组的首地址

j=((n-1)/2)*n; //找到中间的位置

int i=1;



*(p+j)=i++; //中间放置1

while(i<=m) // 循环次数

{

if((j+1)%n == 1 || (j+1)>=2&&(j+1)<=n) //位置是不是宫格的第一行或第一列

{

if((j+1)%n == 1 && j !=0 ) // 位置是不是第一列,但不是第一个位置



{

j=j-1;

*(p+j)=i++;



}



if(j == 0) // 如果是第一个位置则将其位置后移一个,将数值放入其中

{

j=j+1;

*(p+j)=i++;



}

if((j+1)>=2 && (j+1)<=n) // 位置是不是在第一行的第一个到第一行的最后一个

{

j=(n-1)*n+j-1; // 是,就将j转到第n-1行,然后在定位到第n行的j-1列

if(*(p+j) == 0) //看是否j位置是不是有数存入

*(p+j)=i++;

else

{

j=j-(n-1)*n+2; //如果有数,则在原j位置后一个位置存入数

*(p+j)=i++;



}

}

}

else // 位置j不在第一行和第一列,就在j位置的左上方插入数

{

j=j-n-1;

if(*(p+j)==0)

*(p+j)=i++;

else // 如果有数,则在原位置后一个插入数值

{

j=j+n+2;

*(p+j)=i++;

}

}

}//while循环结束

int k=1;

for(p=elem;p<elem+m;p++,k++) //打印输出

{

printf("%-6d",*p);

if(k%n == 0)

printf("\n\n\n");

}

getchar();

getchar();

}



程序的运行图:



一个问题本身也许不会太难以琢磨,但要将转变为计算机能够执行的,这就要求自己对语言的操作和数据的要有比较熟练的掌握了!呵呵,留住最真的于2012.03.07.13:45写~~~~~~~~~~~~~~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐