用C语言打印杨辉三角。杨辉三角参考图如下:

于是不清楚杨辉三角的同学们可以上网查查,可以立刻知道它的相关推理归纳和公式总结。它的简介如下:

所以我们可以使用二项式的方法来写代码。但我下面要讲的是直接观察已有数据来写。
下面再放上一张多数据的图便于我们找规律:

直观看出三角形的两边都是 1 ,每一行的数的个数等于该行行数。(从第三行开始)被两边的 1 包围着的数据中,每个数等于它上一行前一列的数和上一行本列数之和。OK ,这是关于数字。
不要忘了“三角形”效果,我们知道要打印出三角形效果就要在每行开始先打印空格,把数字挤到中间,在按照行数依次减少空格。
仔细观察,根据以上分析,我们发现每步打印都与该行行数相关。中间数据由其上一行数据控制,而上一行数据最终由三角形边上的 1 控制。所以我们可以使用二维数组。使用二维数组就可以同时对相邻两行的数据按照相同的规则进行操作,三角形中间数据的计算和使用恰好要同时使用两行数据。
接着先写循环把二维数组对应三角形的边的部分赋值为 1 ,就可以处理中间数据了。
在这里需要注意的是,因为对上一段落代码的实现有些小复杂。 我们先研究数字打印,最后在无脑加上这些空格,还原成三角形。然后一步一步来写,写完一步打印出来看看结果,正确了就继续写。
就是先实现这张图:

每行首元素是 1 ,第 n 行 的第 n 个元素是 1 。(末位)
#include<stdio.h>
int main()
{
int arr[10][10] = { 0 }; //要先初始化
int a = 1;
int b = 1;
for (a = 0; a < 10; a++)
{
arr[a][0] = 1; //每行首元素是 1
for (b = 0; b <=a; b++)
{
if(a==b)
arr[a][b] = 1; //每行末位是 1
}
}
//打印出来看看上面写的对不对
for (a = 0; a < 10; a++)
{
for (b = 0; b <=a; b++)
{
printf("%d ", arr[a][b]);
}
printf("\n");
}
return 0;
}
注意访问数组是从下标0开始的。(数组的最低下标是0)此处数组下标0对应第一行。
打印结果图:

要操作每个中间数据,就继续在循环内部加上 arr[a][b]的值在打印。
#include<stdio.h>
int main()
{
int arr[10][10] = { 0 };
int a = 1;
int b = 1;
for (a = 0; a < 10; a++)
{
arr[a][0] = 1;
for (b = 0; b <=a; b++)
{
if(a==b)
{
arr[a][b] = 1;
}
if(a>1 && b>=1) //注意这里的判断条件
{
arr[a][b] = arr[a - 1][b - 1] + arr[a - 1][b];//上一行前一列和本列数之和
}
printf("%d ", arr[a][b]);//赋值完一行后直接整行数据都打印
}
printf("\n");
}
return 0;
}
打印效果图:
注意这里的判断条件,1表示的是视觉上的第二行(行数从0开始计算)。根据“杨辉三角”我们可以看出在视觉上的第三行第二列才开始计算中间数据。

b-- 先使用再减减。
//b = 10 - a;
//while (b--)
//{
// printf(" ");
//}
//喜欢两种循环的都可以参考一下,上面精简点
for (b = 10 - a; b > 0; b--)
{
printf(" ");
}
int main()
{
int arr[10][10] = { 0 };
int a = 1;
int b = 1;
for (a = 0; a < 10; a++)
{
b = 10 - a;
while (b--)
{
printf(" ");
}
arr[a][0] = 1;//注意访问数组是从0开始(数组的最低下标是0)
for (b = 0; b <=a; b++)
{
if(a==b)
arr[a][b] = 1;
if(a>1 && b>=1)
arr[a][b] = arr[a - 1][b - 1] + arr[a - 1][b];//上一行前一列和本列数之和
printf("%d ", arr[a][b]);//赋值完一行后直接打印得到的整体打印效果就是直接
}
printf("\n");
}
return 0;
}
最终效果图:

emmmm,好像现实打印出来的三角还是丑了点,至于解决办法,我暂时没想到。(菜还是我菜.jpg) 哪位大佬知道的话欢迎评论留言给我解答,十分感谢。 ^ ^
使用二维数组可以同时改变相关性强的行和列,注意它的巧妙使用。可以看看我写的C语言游戏来练习二维数组的使用。嘿嘿,博客链接 —> [C语言] [游戏] 三子棋 和 [C语言] [游戏] 扫雷
刚开始分着写,每写完一层后就打印确认一下。写完后发现赋值和打印使用的相同的循环,故可以把它们放在一起写,还有那个while循环的后置加加条件也很好,精简了代码。
我们对下一行的数来赋值,这样做的好处是不改变上一行的值,对于本题也更符合实际规律,让其按顺序打印,这样避免了可能的手滑。
不理解的记得私信我哦 ^ ^。
(直接评论区留言也可以^ ^)
———————————————————————————————————————————
十分感谢评论区大佬们的解答——把while循环中打印空格的地方从原来的打印一个空格改成打印两个空格。然后把for循环中打印数值那使用 printf("%-3d ", arr[a][b]); 表示以左对齐、默认3个字符宽度打印数据。那么就能把每一列的宽度都确定为3个字符,也就是每个数字之间的间隙变为固定的了。
然后执行结果是这样,美观多了。^ ^

我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------