运行结果如图所示:

#include "iostream"using namespace std;const int MAXSIZE = 10;int array[MAXSIZE+1][MAXSIZE+1]={0};void assist(int);void deal(int row,int column,int& num,int n);int main(){int n,i,j,num=1,column=1,row=1,cnt=0;cout << "请输入阶数:" << endl; cin >> n;assist(n);while(cnt!=(n%2==0? n/2 : n/2 + 1)){deal(row,column,num,n);row++;column++;cnt++;}for(i=1;i<=n;++i){for(j=1;i+j<n+2;++j)cout << array[i][j] << " ";cout << endl;} } void assist(int n) { for(int i=0;i<=n+2;++i)//建围墙 {array[i][0] = array[0][i] = 1;for(int j=1;j<=n+2;++j)(i+j==n+2? array[i][j]=1 : array[i][j]=0);} } void deal(int row,int column,int& num,int n) { int i=row,j,tmp; for(j=column;!array[i][j];++j)//→ { array[i][j] = num++; } tmp = i+j-1;for(i=row+1;;++i)//斜着 {j=tmp-i;if(array[i][j]==0)array[i][j]=num++;else break;} j++;i-=2;for(;!array[i][j];i--){array[i][j]=num++;} }
|