|
本帖最后由 diggersun 于 2014-11-18 18:37 编辑
1、将1放在首行正中
2、下一次数字原则上放在上一个
数字的右上方 R-- C++
但是,若越界了,类似铺地砖方式(??)
若右上方有数字,则改放在正下方
3、只到 n*n被放下去为止
准备: 定义一个n*n的数组。
1、首行 r=0 c=n/2
2、右上方怎么表示 r--,c++
3、若有数字,怎么表示 a[r][c]!=0;
4、正下方 r++ c不变
setw设置场宽,要配合# include <iomanip> 使用
- # include <iostream>
- # include <iomanip>
- using namespace std;
- const int n=7;
- int a[n][n];
- int r,c,i,j,k,tr,tc;
- int main()
- {
- r=0;c=n/2;k=1;a[r][c]=k;
- while (k<=n*n)
- {
- tr=r-1;tc=c+1;
- if (tr<0) tr=n-1;
- if (tc>n-1) tc=0;
- if (a[tr][tc]!=0) {tr=r+1;tc=c;}
- r=tr;c=tc;k++;a[r][c]=k;
- }
- for (r=0;r<=n-1;r++)
- {for (c=0;c<=n-1;c++) cout<<setw(3)<<a[r][c];
- cout<<endl;
- }
- }
复制代码
|
|