×
嵌入式 > 技术百科 > 详情

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

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

#include
#include
////////////////////////////////////////////////////////////////////////////////
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("输入的行列数过大或过小,请重新输入! ");
     else if(shuru%2==0) printf("您输入的不是一个奇数,请输入一个奇数! ");
     else q=0;
  }
  int Gsz[shuru][shuru]; //九宫格布局数组
  for(y=0;y    for(x=0;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  {               
  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 {
 //向下移动到最底下,向右移一格写
 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  {               
  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      {
      for(x=0;x       {
       printf("%d",Gsz[y][x]);
       if(Gsz[y][x]<=9) printf("   ");
       else printf("  ");
       }
       for(q=0;q        printf("    此列和为:%d",ax );ax=0;
       printf(" ");
       }
       for(x=0,y=0,ax=0;y        printf(" 斜角1的和为:%d",ax);
       for(x=shuru-1,y=0,ax=0;y        printf(" 斜角2的和为:%d",ax);
       printf(" ");
  system("PAUSE"); 
  return 0;
}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题