问题描述
输入一个整数 𝑛 ( 𝑛≤12 ),打印出如下要求的方阵:
除掉右上到左下对角线上的数外的右下半个区域中每个元素等于左边的和上面的元素之和。每个元素场宽为 5 。左上半个区域为空。
输入
一个整数 n ( 𝑛≤12 )
输出
𝑛×𝑛 的方阵(场宽为 5 )。
推算草稿:
附代码:
#include<iostream>
using namespace std;
int s[120][120];
int main()
{
int n,x,y,a,b,c,w,m;
cin>>n;
x=1;//x,y用来辅助生成1、2、3、4对角线的数据,替换原本的0;
y=n;
w=n;//用来辅助后面推算数据时遍历替换数据的值
m=n;//最后辅助输出
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==x&&j==y)
{
s[i][j]=j;
}
}
x++;
y--;
}
for(int x=1;x<n;x++)
{
for(int y=w;y<=n;y++)
{
s[x+1][y]=s[x+1][y-1]+s[x][y];
}
w--;
}
for(int i=1;i<=n;i++)
{
for(int x=n;x>i;x--)
{
cout<<" ";
}
for(int j=m;j<=n;j++)
{
if(s[i][j]>9999&&s[i][j]<100000)
cout<<s[i][j];
if(s[i][j]>999&&s[i][j]<10000)
cout<<" "<<s[i][j];
if(s[i][j]>99&&s[i][j]<1000)
cout<<" "<<s[i][j];
if(s[i][j]>9&&s[i][j]<100)
cout<<" "<<s[i][j];
if(s[i][j]>0&&s[i][j]<10)
cout<<" "<<s[i][j];
}
m--;
cout<<endl;
}
return 0;
}