前言
🎈大家好,我是何小侠🎈
🍃大家可以叫我小何或者小侠🍃
💐希望能通过写博客加深自己对于学习内容的理解💐
🌸也能帮助更多人理解和学习🌸
君子慎独,不欺暗室。
解释:此两句为现代读者合用。君子在独处时,即使别人看不见、听不见,也要谨慎不苟
这篇博客我们一起来学习杨辉三角的解题方法,然后再拿出两个相似思路的题目来练习
目录
- 杨辉三角🍊
- 练习:X形图案 🍊
- 练习:空心三角形🍊
- 总结🍊
杨辉三角🍊
这道题其实只要点出思路就比较简单了。
我们将它看成是一个二维数组,那么打印1的位置只有列为0的时候 和 行和列相等的时候,也就是我们说的对角线。
但是那其他数字该怎么打印呢? 我们可以知道一个规律,
数组上一行的两个数加起来等于下面一行的那个对应的数,但是是在第三行才有这个规律,那么现在就很简单了。
int main() {
int n = 0;
scanf("%d",&n);
int arr[30][30] ={0} ;
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (i == j || j == 0)
{
arr[i][j] = 1;
}
if ( i > 1 && j > 0 && j < i )
{
arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
}
printf("%5d",arr[i][j]);
}
printf("\n");
}
return 0;
}
我们只需要打印一个
这样的三角形,所以第二层for循环里的 j < i 就行。还要注意的一点是题目中提到的的域宽,要以%5d的形式输出。
练习:X形图案 🍊
我们依然讲的清晰一些
还是一样的规律其实, i==j 的时候,打印星星,i+j == 最大行数时,打印星星。
int main() {
int x = 0;
int i = 0;
int j = 0;
while(~scanf("%d",&x))
{
for (i = 0; i < x; i++)
{
for(j = 0; j < x; j++)
{
if (i == j || i+j == x-1)
{
printf("*");
}
else {
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
练习:空心三角形🍊
其实也很简单
我们看到
if (i == j || j == 0)
{
arr[i][j] = 1;
}
杨辉三角中我们是这样打印1的也就是说和这里打印星星是一样的,
但是这样还少了最后一行的星星,我们也只需要多加一个条件就行了
int main() {
int n = 0;
char arr[20][20] = { 0 };
int i = 0;
int j = 0;
while (scanf("%d", &n) == 1) {
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (j == 0 || i == j || i == n - 1)
{
arr[i][j] = '*';
}
else {
arr[i][j] = ' ';
}
printf("%c ", arr[i][j]);
}
printf("\n");
}
}
return 0;
}
总结🍊
这篇博客写的东西并不是太难,主要是想总结一下这一类的题目,还有其实上面的代码都可以不用数组直接打印,但是我觉得用数组可以更好的理解,完~
最后如果这篇博客有帮助到你,欢迎点赞关注加收藏
如果本文有任何错误或者有疑点欢迎在评论区评论