蓝桥杯算法集---Pascal三角形

解题思路:

                1(0,0)

                1(1,0)    1(1,1)

                1(2,0)    2(2,1)    1(2,2)

                1(3,0)    3(3,1)    3(3,2)    1(3,3)

                1(4,0)    4(4,1)    6(4,2)    4(4,3)   1(4,4)

以上代码是一个杨辉三角的一部分:看看每一个元素的坐标变化(每个元素的坐标我已经对应标记了);

    规律:(1)第一列的元素都为1

               (2)当横纵坐标相等时元素也为1

               (3)其他元素都等于正上方元素加正左上方元素之和

    比如:(3,1)位置上的元素就等于(2,0)和(2,1)两个位置上的元素之和即1+2=3;

    大家自己再看看其他位置上的元素,跟着规律走一下;应该就知道是什么意思了。

那么我们用数学语言来描述上面的规律,假设一个位置的坐标为(i,j),数组名为a:

        当j==0或i==j时,对应位置上的元素就为1,即 a[i][j]=1;

        除了满足上一条规律之外的元素都满足:a[i][j] = a[i-1][j] + a[i-1][j-1];



    代码如下; 不懂得留言,谢谢!

注意事项:

        应该先设置满足规律(1)和规律(2),对应位置上的值 ,因为规律(3)是建立在前两条规律之的。
#include<bits/stdc++.h>
using namespace std;

int a[100][100]; 
int main(){
	int n;
	cin>>n;
    for(int i = 0; i < n+1; ++i){
        for(int j = 0; j <= i; ++j){
            if(i==j && j==0){
               a[i][j] = 1;
		    }
			   else{
			   a[i][j] = a[i-1][j] + a[i-1][j-1];
			   }
			}
		}
    for(int i = 0; i < n+1; ++i){
        for(int j = 0; j < n-i; ++j){
            cout<<"   ";
			}
		for(int j = 0; j <= i; ++j){
		    printf("%3d   ", a[i][j]);
			}
		cout<<endl;
		}
return 0; 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值