标题:这个九宫格程序原理是什么呢?
取消只看楼主
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
结帖率:41.18%
已结贴  问题点数:10 回复次数:0 
这个九宫格程序原理是什么呢?
程序代码:
//输出N*N的数组
//1.先将1填在方阵第一行中间,即(1,(n+1)/2)的位置
//2.一个数填在上一个数的主对角线的上方
//若上一个数的位置是(i,j),下一个数应填在(i1,j1),其中i1=i-1,j1=j-1
//3.若填写的位置下标出界,则出界的值用n替代,即若i-1=0,则取i1=n
//若j-1=0,则取j1=n
//4.若填写的位置没有出界,但已经填有数的话,则应填在上一个数的下面(行减1,列不变)
//即取i1=i-1,j1=j
//5.这样循环直到n*n全部输入到方阵中
#include <iostream>
using namespace std;
int main(void)
{
   //i,j分别表示当前数组的行和列
   //i1,j1分别表示该数(i,j)的对角线上方
   //i1 = i - 1, j1 = j - 1
   int i, j, i1, j1, x, n, a[100][100];  

   cout<<"Input an odd number: ";
   cin>>n;
   //将从1到n的数组都初始化为0
   for(i = 1; i <= n; i++)
      for(j = 1; j <= n; j++)
         a[i][j] = 0;
   //检查是否为奇数,如果为奇数继续程序
  //否则结束程序
   if (n % 2 == 0)
   {
      cout<<"Input error.";
      return 0;
   }
   //执行第一步,先将1填写在方阵第一行中间
   //即(1,(n+1)/2)的位置
   i = 1;
   j = int((n + 1)/2);
   //x从1开始到小等于n*n的数可以填写在方阵中
   x = 1;
   while(n*n >= x)
   {
      a[i][j] = x;   //此时i=1,j=((n+1)/2),即为第一行的中间位置
      x += 1;
      //41-45:将i1的j1分别赋值给i和j,接着将i,j自减1
      //此时a[i][j]的位置在a[i1][j1]的对角线的斜上方
      i1 = i;
      j1 = j;
      i -= 1;
      j -= 1;
      //如果行(i)等于0,则i等于该数组的下界(n)
      if (i == 0) i = n;
      //同理
      if (j == 0) j = n;
      //4.若填写的位置没有出界,但已经填有数的话,则应填在上一个数的下面(行减1,列不变)
      //即取i1=i-1,j1=j
      if (a[i][j] != 0)
      {
         i = i1 + 1;
         j = j1;
      }
   }

   //输出该数组
   for(i = 1; i <= n; i++)
   {
      for(j = 1; j <= n; j++)
         cout<<a[i][j]<<"\t";
      cout<<endl;
   }

   return 0;
}

这是个输出九宫格的程序,感觉每一行要做什么都懂了,合起来就不懂了.请教下论坛的朋友们这个程序的原理是什么?自己写的注释有点多...
搜索更多相关主题的帖子: 九宫格 对角线 
2015-11-10 17:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-459070-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024860 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved