当前位置:网站首页>Explication détaillée du triangle Yang hui

Explication détaillée du triangle Yang hui

2022-06-13 06:14:00 QW & jy

 


 
 

  

Triangle Yang hui

Triangle Yang hui
Prémisse:Le nombre d'extrémités et de terminaisons par ligne est1.

  1. Chaque nombre est égal à la somme des deux nombres au - dessus.

  2. Les chiffres de chaque ligne sont symétriques à gauche et à droite,Par 1 Commence à s'agrandir.

  3. No n Les chiffres de la ligne sont n Item (s).

  4. Avant n Total[(1 + n) * n] / 2 Nombre.

  5. No n D'accord. m Le nombre peut être exprimé en C(n - 1,m - 1),De n - 1 De différents éléments m - 1 Nombre de combinaisons d'éléments.

  6. No n Ligne m Nombre et n - m + 1Nombre égal ,Est l'une des propriétés du nombre combiné.

  7. Chaque chiffre est égal à la somme des deux chiffres de gauche et de droite de la ligne précédente.Utilisez cette propriété pour écrire tout le triangle de Yang hui.C'est - à - dire n + 1 Ligne i Nombre, etc. 8 Par. n Ligne i - 1 Nombre et i La somme des nombres,C'est aussi une des propriétés des nombres combinatoires.C'est - à - dire: C(n + 1, i) = C(n, i) + C(n, i - 1).

  8. (a + b) * n Les coefficients de l'expansion de l'équation de (n + 1) Chaque élément de la ligne.

  9. De 2n + 1 Ligne 1 Nombre,Avec 2n + 2 Ligne 3 Nombre、No 2n + 3 Ligne 5 Nombre……En ligne, La somme de ces nombres est 4n + 1 Nombre de Fibonacci;De 2n Ligne 2 Nombre(n > 1),Avec 2n - 1 Ligne 4 Nombre、No 2n - 2 Ligne 6 Nombre…… La somme de ces nombres est 4n - 2 Nombre de Fibonacci.
    Série Fibonacci

  10. De n Le nombre de lignes est multiplié par 10(m-1),Parmi euxm Est la colonne de ce nombre , Additionnez les éléments comme suit: 11(n-1).110 = 1,111 = 1 x 100 + 1 × 101 = 11,112 = 1 × 100 + 2 x 101 + 1 x 102 = 121,113 = 1 x 100 + 3 × 101 + 3 x 102 + 1 x 103 = 1331,114 = 1 x 100 + 4 x 101 + 6 x 102 + 4 x 103 + 1 x 104 = 14641,115 = 1 x 100 + 5 x 101 + 10 x 102 + 10 x 103 + 5 x 104 + 1 × 105 = 161051.
    10

  11. No n La somme des chiffres de ligne est2(n-1).1 = 2(1-1),1 + 1 = 2(2-1),1 + 2 + 1 = 2(3-1),1 + 3 + 3 + 1 = 2(4-1),1 + 4 + 6 + 4 + 1 = 2(5-1),1 + 5 + 10 + 10 + 5 + 1 = 2(6-1).
    NonLigne et

  12. La somme des nombres sur la barre oblique est égale à gauche(Barre oblique du haut à gauche au bas à droite) Ou tourner à droite ( Barre oblique du haut à droite au bas à gauche ),Les chiffres au coin.1 + 1 = 2,1 + 1 + 1 = 3,1 + 1 + 1 + 1 = 4,1 + 2 = 3,1 + 2 + 3 = 6,1 + 2 + 3 + 4 = 10,1 + 3 = 4,1 + 3 + 6 = 10,1 + 4 = 5.
    12

  13. Aligner les numéros de ligne à gauche , Nombre dont la somme des diagonales supérieure droite à inférieure gauche est égale à la séquence Fibonacci .1,1,1 + 1 = 2,2 + 1 = 3,1 + 3 + 1 = 5,3 + 4 + 1 = 8,1 + 6 + 5 + 1 = 13,4 + 10 + 6 + 1 = 21,1 + 10 + 15 + 7 + 1 = 34,5 + 20 + 21 + 8 + 1 = 55.
    Série Fibonacci

 
 

 
 

 
 

Exemples

Première question

Titre
Liens vers les sujets

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int n;

int main(){
    
	scanf("%d", &n);
	int num[50][50];
	num[1][1] = 1;
	for(int i = 1; i <= n; i ++){
    
		for(int j = 1; j <= i; j ++){
    
			if(j == i || j == 1){
    
				num[i][j] = 1;
				printf("%d ", num[i][j]);	
			}
			else{
    
				num[i][j] = num[i - 1][j - 1] + num[i - 1][j];
				printf("%d ", num[i][j]);
			}
		}
		printf("\n");
	}
	return 0;
}

 
 

 
 

 
 

Deuxième question

Titre
Liens vers les sujets

Symétrie trigonométrique de Yang hui (C(a, b) == C(a, a-b)),Et à cause de la recherche de la première apparition,Donc ça doit être à gauche,La droite peut être effacée directement!
Explication du problème
Nature:

  1. Chaque barre oblique augmente de haut en bas
  2. Chaque ligne diminue du milieu aux deux côtés

Ordre inverse(De16C'est parti.)Utiliser la recherche binaire.

Paramètre dichotomique :l:2k    r:max(n, l)    n Nombre de recherches pour
L'extrémité droite ne doit pas être plus petite que l'extrémité gauche!
Cas particuliers:Sinon, quand n = 1 Heure,Ça va mal tourner..

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long LL;

int n;

//C(a, b) = a!/b!(a-b)! = a * (a-1) .. b- Oui. / b!
LL C(int a, int b){
    //S'il vous plaît.aLignebValeur de la colonne
	LL cnt = 1;
	for(int i = a, j = 1; j <= b; i --, j ++){
    
		cnt = cnt * i / j;
		if(cnt > n)//Plus grand quenÇa n'a aucun sens, Mets - le sur le super. long long 
			return cnt;
	}
	return cnt;
}

bool check(int k){
    // Deux points pour la diagonale,Trouver le premier nombre supérieur ou égal à cette valeur
	int l = 2 * k, r = max(n, l);
	while(l < r){
    
		int mid = l + r >> 1;
		if(C(mid, k) >= n)
			r = mid;
		else
			l = mid + 1;
	}
	if(C(r, k) != n)
		return false;
	printf("%lld", 1ll * (r + 1) * r / 2 + k + 1);//C(r, k)La valeur séquentielle correspondante est:(r + 1) * r / 2 + k + 1
	return true;
}

int main(){
    
	scanf("%d", &n);
	for(int k = 16; ; k --)
		if(check(k))
			break;
	return 0;
}

 
 

 
 

 
 

Question n° 3

Titre
Liens vers les sujets

class Solution {
    
public:
    vector<vector<int>> generate(int numRows) {
    
        vector<vector<int>> num;
        for(int i = 0; i < numRows; i ++){
    
            vector<int> a(i + 1);
            for(int j = 0; j <= i; j ++){
    
                if(j == 0 || i == j)
                    a[j] = 1;
                else
                    a[j] = num[i - 1][j - 1] + num[i - 1][j];
            }
            num.push_back(a);
        }
        return num;
    }
};

 
 

 
 

 
 

Question n° 4

Titre
Liens vers les sujets

class Solution {
    
public:
    vector<int> getRow(int rowIndex) {
    
        vector<vector<int>> num;
        for(int i = 0; i <= rowIndex; i ++){
    
            vector<int> a(i + 1);
            for(int j = 0; j <= i; j ++){
    
                if(j == 0 || i == j)
                    a[j] = 1;
                else
                    a[j] = num[i - 1][j - 1] + num[i - 1][j];
            }
            num.push_back(a);
        }
        return num[rowIndex];
    }
};
原网站

版权声明
本文为[QW & jy]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/164/202206130605300516.html