C 语言输出杨辉三角。
工具/材料
gcc+vim(linux)或visual studio(windows)
操作方法
使用vim创建一个文件yanghui.c,并打开它进行编辑。
首先输入预处理指令 #include
编译一个函数void yanghui(int n)。其中,n表示二项式的次数。
首先,对二项式的幂次进行检查,若小于0,说明输入的次数是不合法的,直接结束打印并给出提示。
然后定义一个(n+1)*(n+1)的二维数组并初始化所有值为0。
然后根据杨辉三角的规律给数组赋值:
每一行的第一个与最后一个数都是1;
其他的数等于该数的上面一个数与左上角的数之和。
对杨辉三角进行输出,不相关的数组数据不输出,并注意换行。
在main函数中对 void yanghui(int n)进行测试,选用参数为3, 7, 10。
保存文档并进行编译输出的结果如下:
由此可以验证我们的程序是正确的。
C语言输出杨辉三角
C语言经典算法|输出杨辉三角,这可是期末考试必须要会的程序啊
题目:
输入n,输出杨辉三角形的前n行。杨辉三角形如下:11 11 2 11 3 3 11 4 6 4 1…每行第一列和最后一列元素均为1其他列元素为其所在位置的上一行对应列和上一行前一列元素之和
一个漂亮的杨辉三角
步骤一:首先呢,我喜欢先把大体模样输出来,先实现输入行数n,然后输出一个由n行字符构成的三角形,如下:
大体框架
先不管这个三角形和杨辉三角长得是否一样,总之利用两个for循环输出类似的图形,是考试必会的,我们之后美化一下图形。
步骤二:好嘞,接下来该分析一下杨辉三角的特征了:
规律1
将上图杨辉三角按行从第1行开始,列从第0列开始,那么图中被圈出来的10和5都是第六行的。
不难得出结论:10=上一行的4 6,5=上一行的4 1。利用这个规律,可以构建二维数组a[][],从而有:
a[i][j]=a[i-1][j-1] a[i-1][j];/*每个数是上面两数之和*/
//下面是利用上述方法的关键代码
void yanghui(int a[][N])
{
int j, k;
for (j = 0; j { a[j][0] = 1; a[j][j] = 1; } for (j = 2; j for (k = 1; k a[j][k] = a[j - 1][k - 1] a[j - 1][k]; } 另外一种方法,不知道大家有没有注意到: 规律2 也就是:位于第i行j列的数=(i-j)*前面一个数/j。 即(行数-列数)*前面一个数/列数 好啦,根据这个思想,编写代码如下: int main() { int n; cout << "请输入行数:" << endl; cin >> n; int upNumber = 1;//用来记录上一个数 for (int i = 1; i <= n; i ) { upNumber = 1; //输出三角空格 for (int j = n; j>i; j--)//这是为了使三角形成为正三角形 { cout << " "; } cout << "1";// 这是输出每一行的第一个1 for (int j = 1; j <= i - 2; j ) { upNumber = (i - j) * upNumber / j; cout << upNumber<<" "; } cout << "1" << endl;// 每一行的最后一个 1 } return 0; } 得到一个歪歪扭扭的三角形 步骤三:接下来先不忙着调整上面这个扭曲的三角形,我们仔细看一下发现第一行输出了两个1,这是什么情况呢。 原因 那么我们可以加一个判断: 如果是第一行,就直接输出一个1就好额,其他的行就按规律行事。 注意看if-else语句 步骤四:现在可以来调整三角形的样子啦。 排版嘛,就是空格的多少,百位数的就是一个空格,十位数的就是两个空格,至于是一位数的话,就是一个空格。 最后暴力解决,长这样! 完整代码如下: #include #include using namespace std; int main() { int n = 0; cout << "请输入行数:" << endl; cin >> n; int upNumber = 1;//用来记录上一个数 int count = 1; //排序时用来记录数字的长度 int sum = 0;//排序时用来计算的变量 for (int i = 1; i <= n; i ) { upNumber = 1; //输出三角空格 for (int j = n; j>i; j--)//这是为了使三角形成为正三角形 { cout << " "; } if (i == 1) { cout << "1"< else{ cout << "1"<<" " ;// 这是输出每一行的第一个1 for (int j = 1; j <= i - 2; j ) { upNumber = (i - j) * upNumber / j; sum = upNumber; while (sum>=10) { sum /= 10; count ; } if (count == 3) { cout << upNumber << " "; count = 1; } else if (count == 2) { cout << upNumber << " "; count = 1; } else { cout << upNumber << " "; count = 1; } } cout << "1" << endl;// 每一行的最后一个 1 } } return 0; } 当然啦,上述代码只是求解杨辉三角形中最简单最基础的两种。 学渣表示伤不起哇。 欢迎大家提供其他的解决思路~~
- 02-26科技
用电脑怎么看薇娅直播
- 02-08教育
2022夏天治愈系文案分享
- 03-23生活
地皮菌怎么洗干净又快
- 02-22教育
老人与海读后感500字五年级
- 03-13生活
如何起笔名
- 11-25生活
霸气游戏名字大全最新版的
- 08-21教育
澳洲留学幼教专业好不好?
- 06-28生活
名胜古迹的地方有哪些
推荐
- 1绝地求生:刺激战场如何调整界面设置230
- 2六寸多大386
- 3歌词写得很感人的歌曲有哪些?241
- 4毛坯房装修步骤和流程329
- 5用吨表示的物品有哪些284
- 6感恩父母的一封信推荐阅读经典184