自己编写的奇数宫格程序
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写~~~~~~~~~~~~~~~~~
#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写~~~~~~~~~~~~~~~~~
相关文章推荐
- 2015.6.27_记录自己学到的和自己容易忘记的有关编写MapReduce程序的要点
- 编写程序,当程序运行后,根据屏幕提示输入一个数字字符串,输入后统计有多少个偶数数字和奇数数字。
- 基于UT4418编写自己的第一个Android程序 (五)
- c51 proteus仿真编写矩阵键盘(练习自己编写程序的规范)
- 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足一下条件的单词:该单词的后面紧接着再次出现自己本身。跟踪重复次数最多的单词及其重复次数,输出.
- 自己编写的一个程序:读取XML格式的日志文件,并以一定的数据写入数据库中
- 3.第三单元任务二实训:使用作业提交系统提交Java作业时 ,需要输入Java源代码文件名和自己的邮箱,提交前对Java文件名以及邮箱进行有效检查。编写程序实现对输入的Java源文件名以及邮箱有效性的
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- [转载]自己编写 php 在线问卷调查程序
- Django官方文档----编写自己的Django程序之第一步
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍 .
- 编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
- 编写程序处理vector<int>对象的元素:将每个奇数值元素用该值的两倍替换。
- 编写程序,当程序运行后,根据屏幕提示输入一个数字字符串,输入后统计有多少个偶数数字和奇数数字。
- 自己编写ASSERT()宏(对调试程序很有帮助)
- Commander-快速编写自己的命令行程序
- 编写LED控制程序,完成LED奇数号灯和偶数号灯的交替显示
- 《APUE.3E》习题4.6编写自己的cp(l)程序,它复制包含空洞的文件,但不将字节0包含到输出文件中去
- 一步一步制作yaffs/yaffs2根文件系统(八)---总结及怎么样使系统自动启动自己编写的程序
- http://zhoulifa.bokee.com/用C语言自己编写一个ls程序