C 一道杨辉三角题
题干:
输入一个数,输出对应层数的杨辉三角。
什么是杨辉三角:http://zh.wikipedia.org/wiki/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92%E5%BD%A2
作为一个逗逼……不小心让上次的斐波那契数列题的former
和later
走错片场于是……不用在意这些细节。
我的可悲的写法QvQ
#include <stdio.h>
int Yang(int num);
int main(void)
{
int num;
printf("请输入你要的层数: ");
scanf("%d", &num);
Yang(num);
return 0;
}
int Yang(int num)
{
int i, j, k, array[num], result[num], former, later;
for (i = 1; i <= num; i++) {
array[0] = 1;
array[i - 1] = 1;
result[0] = 1;
result[i - 1] = 1;
for (j = 1; j < i - 1; j++) {
former = array[j - 1];
later = array[j];
result[j] = former + later;
}
for (k = 0; k < i; k++)
array[k] = result[k];
}
for (i = 0; i < num; i++)
printf("%-3d", result[i]);
return 0;
}
不擅长用递归,于是就直接算吧……数组部分还没怎么学就这么混混咯,部分参考了一下上次的C 斐波那契数列题目两则,其实是两个数组传值运算。
相比之下师匠的方法显得高明得多,具体效率其实并不清楚谁快谁慢,递归嘛,本身效率就不高,不过代码简单。
#include <stdio.h>
int Yang(int row, int col)
{
int len = row;
if (row == 1 || col == 1 || col == len)
return 1;
if (col > len)
return 0;
return Yang(row - 1, col - 1) + Yang(row - 1, col);
}
int main(void)
{
int row, i;
scanf("%d", &row);
for (i = 1; i <= row; ++i)
printf("%d ", Yang(row, i));
printf("\n");
return 0;
}
因为函数在main上面,所以声明和内容合并了 放在下面按照规定就得声明了QvQ好烦啦
递归的思路,关于递归,另开文章说。
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。