triángulo de lágrima de mano a altas horas de la noche

En el lenguaje C, los bucles for se pueden usar para hacer muchas cosas. Lo que quiero compartir con ustedes hoy es imprimir dos triángulos cerrados a través del bucle for, entonces, ¿por qué no digo que es un rombo? Oye, estoy haciendo preguntas, y está el famoso problema del triángulo de Yang Hui.

inserte la descripción de la imagen aquí

Triángulo Yang Hui

El triángulo de Yang Hui es esencialmente un triángulo formado por los coeficientes de cada elemento después de la n-ésima expansión de potencia del binomio (a+b). Sus propiedades incluyen: el número de extremos de cada fila es 1, y un número también es 1; cada número es igual a la suma de los dos números en sus lados superior izquierdo y superior.

¿Cómo usar el lenguaje C para realizar el triángulo de Yang Hui? ? ?
inserte la descripción de la imagen aquí
Figura 1

Este es el efecto final a lograr.
Si elimino los espacios en la impresión, será el siguiente efecto
inserte la descripción de la imagen aquí
Figura 3

El número de dígitos puede ser diferente. No está claro. ¿Qué pasa si todos los números son iguales? ?
inserte la descripción de la imagen aquí
Figura 4

Se puede ver desde aquí que podemos poner los datos en una matriz bidimensional. Por ejemplo,
int main()
{ int arr[10][10] = { 0 }; int i = 0;

for (i = 0; i <10; i++)
{
	int j=0;
	
	
	for (j = 0; j <=i; j++)    //这里j<=i就是为了打印主对角线下方的数据
	{
		printf("%d ", arr[i][j]);
	}
	printf("\n");
}

}
De acuerdo con la Figura 3, podemos ver que la primera columna de la matriz bidimensional es todo 1, y la diagonal principal también es 1. El código se implementa de la siguiente manera

int main()
{ int arr[10][10] = { 0 }; int i = 0;

for (i = 0; i < 10; i++)
{
	int j = 0;
	for (j = 0; j < 10; j++)
	{
		if(j == 0)//如果是第一列赋值为1
		{
			arr[i][j] = 1;
		}
		if (i==j)//如果是主对角线赋值为1
		{
			arr[i][j] = 1;
		}
	
    }

}
para (i = 0; i <10; i++)
{ int j=0;

	for (j = 0; j <=i; j++)
	{
		printf("%d ", arr[i][j]);
	}
	printf("\n");
}

}
Los resultados de impresión son los siguientes
inserte la descripción de la imagen aquí
, pero todavía hay diferencias entre esta imagen y la Figura 3. En comparación, se encuentra que si se van a realizar los datos del triángulo de Yang Hui,

inserte la descripción de la imagen aquí

Los datos del círculo rojo de abajo deben ser la suma de los dos datos del círculo rojo de arriba, es decir, arr[2][1]=arr[1][1]+arr[1][0];

arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];`
int main()
{
    
    
	int arr[10][10] = {
    
     0 };
	int i = 0;

	for (i = 0; i < 10; i++)
	{
    
    
		int j = 0;
		for (j = 0; j < 10; j++)
		{
    
    
			if(j == 0)
			{
    
    
				arr[i][j] = 1;
			}
			if (i==j)
			{
    
    
				arr[i][j] = 1;
			}
			if (i >= 1 && j >= 1)
			{
    
    
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
		
        }
}
	for (i = 0; i <10; i++)
	{
    
    
		int j=0;
		
		
		for (j = 0; j <=i; j++)
		{
    
    
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}

Ahora obtenemos el resultado de la Figura 3. Para que aparezca la forma del triángulo, comience a agregar espacios,
agregue espacios antes de imprimir cada línea, y la cantidad de espacios en cada línea disminuirá, podemos darnos cuenta haciendo un bucle

int main()
{
    
    
	int arr[10][10] = {
    
     0 };
	int i = 0;

	for (i = 0; i < 10; i++)
	{
    
    
		int j = 0;
		for (j = 0; j <=i; j++)
		{
    
    
			if (j == 0)
			{
    
    
				arr[i][j] = 1;
			}
			if (i == j)
			{
    
    
				arr[i][j] = 1;
			}
			if (i >= 1 && j >= 1)
			{
    
    
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];

			}
		}
	}
		for (i = 0; i < 10; i++)
		{
    
    
			int j = 0;
			for (int k = 0; k < 10 - i; k++)//循环打印空格,空格数随着行数递减,i越大循环次数越小,打印空格越少,最后保证在最后一行i=9时,前面有一个空格,这里的循环判断可以写k < 10 - i
		{
    
    
			printf("  ");//两个空格
		}

			for (j = 0; j <=i; j++)
			{
    
    
				printf("%3d", arr[i][j]);
			}
			printf("\n");
		}
	}
	printf("  ");//两个空格
```c
在这里插入代码片
printf("%3d ", arr[i][j]);

Se verá mejor si lo imprimes así.

# 打印菱形

![在这里插入图片描述](https://img-blog.csdnimg.cn/41cfb3f89f6c4c389ffe4684d3c659fa.png#pic_center)

这个菱形的打印我们可以分为上半部分和下半部分,可以从键盘输入上面的三角为n行,而下面的三角则为n-1行,我们先实现上半部分

```c
int n = 0;

	scanf_s("%d", &n);//通过键盘输入n行

	for (int i = 1; i <= n; i++)//循环遍历每一行

	{

		int j = 0;

		for (j = 0; j < n - i; j++)//为了使上半部分最后一行刚好与左边界对齐,循环判断条件为j < n - i当i==n时刚好打印空格的循环不进行循环,从第一行往下每一行少打印一个空格

		{

			printf(" ");



		}

		for (int k = 0; k < 2 * i - 1; k++)//打印*,观察规律打印*次数与行数有关,i为行数,*的数目为2*i-1

		{

			printf("*");

		}

		printf("\n");每一行结束打印换行


	}

inserte la descripción de la imagen aquí

Ingrese n=7, siete líneas en la primera mitad y
las siguientes n-1 líneas utilicen un método similar
, `for (int i = 1; i <= n - 1; i++)//ciclo a través de los siguientes n-1 líneas

{

	int j = 0;

	for (j = 0; j < i; j++)//为了和上面对称,并且空格的数目递增,1, 2 ,3这样增加,可以把循环条件与i联系起来,i每次jia1,j就可以多循环1次,多打印一个空格,循环判断条件可以写成j < i

	{

		printf(" ");



	}

	for (int q = 0; q < 2 * (n - 1 - i) + 1; q++)//根据下面打印的结果,下面第一行打印的应该是11个*,n=7,n-1=6,打印的次数为2*(n-1)-1吗??因为打印的*的次数每一行时变化的,所以应该和i这个变化的行数结合起来,下面第一行i=1;这一行打印了2*(n-1-i)+1次,

	{

		printf("*");

	}

	printf("\n");

}

inserte la descripción de la imagen aquí
código general

int main()

{
    
    

	int n = 0;

	scanf_s("%d", &n);

	for (int i = 1; i <= n; i++)

	{
    
    

		int j = 0;

		for (j = 0; j < n - i; j++)

		{
    
    

			printf(" ");



		}

		for (int k = 0; k < 2 * i - 1; k++)

		{
    
    

			printf("*");

		}

		printf("\n");

	}


	for (int i = 1; i <= n - 1; i++)

	{
    
    

		int j = 0;

		for (j = 0; j < i; j++)

		{
    
    

			printf(" ");



		}

		for (int q = 0; q < 2 * (n - 1 - i) + 1; q++)

		{
    
    

			printf("*");

		}

		printf("\n");

	}}

Puede imprimir muchos patrones atractivos a través del bucle for, excepto el patrón de triángulo de arriba, espero que me apoye mucho, si hay algo mal, por favor deme muchos consejos, gracias a todos.

Supongo que te gusta

Origin blog.csdn.net/yyqzjw/article/details/131999986
Recomendado
Clasificación