| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1593 人关注过本帖
标题:这个九宫格程序原理是什么呢?
取消只看楼主 加入收藏
家力掠
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
快速回复:这个九宫格程序原理是什么呢?
数据加载中...
 
   



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

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