专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

DEV C++九宫格的解法源程序

作者:佚名   来源:本站原创   点击数:  更新时间:2013年12月17日   【字体:

下面是源码VS2010坏了还没来得及重装用DEV-C++弄的,注释我写的很详细,因为E文很烂所以变量名很有中国特色,求理解.................

#include <stdio.h>
#include <stdlib.h>
////////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
  int x=0; //行
  int y=0; //列
  int q=1; //循环标记
  int sz;
  int shuru; //输入九宫格的行列数必须为>3的奇数
  //判断输入值是否正确
  for(;q;)
  {
     printf("请输入要生成的九宫格的行列数:");
     scanf("%d",&shuru);
     if(shuru<=3||shuru>=100) printf("输入的行列数过大或过小,请重新输入!\n");
     else if(shuru%2==0) printf("您输入的不是一个奇数,请输入一个奇数!\n");
     else q=0;
  }
  int Gsz[shuru][shuru]; //九宫格布局数组
  for(y=0;y<shuru;y++)
   for(x=0;x<shuru;x++)
    Gsz[y][x]=0;     //九宫格布局数组初始化
 ///////////////////////////////////////////////////////////////////////////////
 x=0;
 y=0;
 int s=1; 
 //第一步
 //首先在第一行中间写下1
 x=(shuru-1)/2;
 Gsz[y][x]=s;
 s++;
 for(q=1;q==1;)
 {
//程序关键转向处
 if(y==0&&x==(shuru-1))
  {
    y++;                 
    Gsz[y][x]=s;
    s++;
    y=0;
    x=0;
    Gsz[y][x]=s;
    s++;
    q=0;
  }else
  {               
 //然后向下移动到最底下,向右移一格写
 y=shuru-1;
 x++;
 Gsz[y][x]=s;
 s++;
 //然后一下向右上方写到最边处
 for(;x<(shuru-1);)
 {              
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
 }
 //然后平移到最左边,向上移动一格写
 y--;
 x=0;
 Gsz[y][x]=s;
 s++;
 //向右上方写。遇到数字后向下写
 y--;
 x++;
 for(;Gsz[y][x]==0;)
 {
   Gsz[y][x]=s;
   s++;
   y--;
   x++;             
 }
 y++;x--;  //还原循环最后一次的无效数值变化
//向下写一格
y++;
Gsz[y][x]=s;
s++;
//继续向右上写直到最边处
for(;y>0;)
{
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
}
}
}     
//第二步
for(;s<(shuru*shuru);)
{
 //向下移动到最底下,向右移一格写
 y=shuru-1;
 x++;
 Gsz[y][x]=s;
 s++;
  //向右上方写。遇到数字后向下写
 y--;
 x++;
 for(;Gsz[y][x]==0;)
 {
   Gsz[y][x]=s;
   s++;
   y--;
   x++;             
 }
 y++;x--;  //还原循环最后一次的无效数值变化
//向下写一格
y++;
Gsz[y][x]=s;
s++;
//继续向右上写直到最边处
for(;x<(shuru-1);)
 {              
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
 }
 //然后平移到最左边,向上移动一格写
 y--;
 x=0;
 Gsz[y][x]=s;
 s++;
 //继续向右上写直到最边处
for(;y>0;)
{
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
}           
}
Gsz[(shuru-1)][(shuru-1)/2]=s; //写最后一个数值
////////////////////////////////////////////////////////////////////////////////
int ax=0;  
    //屏幕输出
     for(y=0;y<shuru;y++)
     {
      for(x=0;x<shuru;x++)
      {
       printf("%d",Gsz[y][x]);
       if(Gsz[y][x]<=9) printf("   ");
       else printf("  ");
       }
       for(q=0;q<shuru;q++) ax+=Gsz[y][q];
       printf("    此列和为:%d",ax );ax=0;
       printf("\n\n");
       }
       for(x=0,y=0,ax=0;y<shuru;x++,y++)ax+=Gsz[y][x];
       printf("\n斜角1的和为:%d",ax);
       for(x=shuru-1,y=0,ax=0;y<shuru;x--,y++)ax+=Gsz[y][x];
       printf("\n斜角2的和为:%d",ax);
       printf("\n\n");
  system("PAUSE");
  return 0;
}

关闭窗口

相关文章