專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

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

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月17日   【字體:

下面是源碼VS2010壞了還沒(méi)來(lái)得及重裝用DEV-C++弄的,注釋我寫(xiě)的很詳細(xì),因?yàn)椋盼暮軤€所以變量名很有中國(guó)特色,求理解.................

#include <stdio.h>
#include <stdlib.h>
////////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
  int x=0; //行
  int y=0; //列
  int q=1; //循環(huán)標(biāo)記
  int sz;
  int shuru; //輸入九宮格的行列數(shù)必須為>3的奇數(shù)
  //判斷輸入值是否正確
  for(;q;)
  {
     printf("請(qǐng)輸入要生成的九宮格的行列數(shù):");
     scanf("%d",&shuru);
     if(shuru<=3||shuru>=100) printf("輸入的行列數(shù)過(guò)大或過(guò)小,請(qǐng)重新輸入!\n");
     else if(shuru%2==0) printf("您輸入的不是一個(gè)奇數(shù),請(qǐng)輸入一個(gè)奇數(shù)!\n");
     else q=0;
  }
  int Gsz[shuru][shuru]; //九宮格布局?jǐn)?shù)組
  for(y=0;y<shuru;y++)
   for(x=0;x<shuru;x++)
    Gsz[y][x]=0;     //九宮格布局?jǐn)?shù)組初始化
 ///////////////////////////////////////////////////////////////////////////////
 x=0;
 y=0;
 int s=1; 
 //第一步
 //首先在第一行中間寫(xiě)下1
 x=(shuru-1)/2;
 Gsz[y][x]=s;
 s++;
 for(q=1;q==1;)
 {
//程序關(guān)鍵轉(zhuǎn)向處
 if(y==0&&x==(shuru-1))
  {
    y++;                 
    Gsz[y][x]=s;
    s++;
    y=0;
    x=0;
    Gsz[y][x]=s;
    s++;
    q=0;
  }else
  {               
 //然后向下移動(dòng)到最底下,向右移一格寫(xiě)
 y=shuru-1;
 x++;
 Gsz[y][x]=s;
 s++;
 //然后一下向右上方寫(xiě)到最邊處
 for(;x<(shuru-1);)
 {              
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
 }
 //然后平移到最左邊,向上移動(dòng)一格寫(xiě)
 y--;
 x=0;
 Gsz[y][x]=s;
 s++;
 //向右上方寫(xiě)。遇到數(shù)字后向下寫(xiě)
 y--;
 x++;
 for(;Gsz[y][x]==0;)
 {
   Gsz[y][x]=s;
   s++;
   y--;
   x++;             
 }
 y++;x--;  //還原循環(huán)最后一次的無(wú)效數(shù)值變化
//向下寫(xiě)一格
y++;
Gsz[y][x]=s;
s++;
//繼續(xù)向右上寫(xiě)直到最邊處
for(;y>0;)
{
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
}
}
}     
//第二步
for(;s<(shuru*shuru);)
{
 //向下移動(dòng)到最底下,向右移一格寫(xiě)
 y=shuru-1;
 x++;
 Gsz[y][x]=s;
 s++;
  //向右上方寫(xiě)。遇到數(shù)字后向下寫(xiě)
 y--;
 x++;
 for(;Gsz[y][x]==0;)
 {
   Gsz[y][x]=s;
   s++;
   y--;
   x++;             
 }
 y++;x--;  //還原循環(huán)最后一次的無(wú)效數(shù)值變化
//向下寫(xiě)一格
y++;
Gsz[y][x]=s;
s++;
//繼續(xù)向右上寫(xiě)直到最邊處
for(;x<(shuru-1);)
 {              
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
 }
 //然后平移到最左邊,向上移動(dòng)一格寫(xiě)
 y--;
 x=0;
 Gsz[y][x]=s;
 s++;
 //繼續(xù)向右上寫(xiě)直到最邊處
for(;y>0;)
{
  y--;         
  x++;
  Gsz[y][x]=s;
  s++;
}           
}
Gsz[(shuru-1)][(shuru-1)/2]=s; //寫(xiě)最后一個(gè)數(shù)值
////////////////////////////////////////////////////////////////////////////////
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;
}

關(guān)閉窗口

相關(guān)文章