这个九宫格程序原理是什么呢?
程序代码:
//输出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; } 这是个输出九宫格的程序,感觉每一行要做什么都懂了,合起来就不懂了.请教下论坛的朋友们这个程序的原理是什么?自己写的注释有点多...