今天是第三天:练习-数组-杨辉三角的查找
大家好,我是C语言小白-Haven,昨天学习自己去码简单自制项目作为昨天晚上的作业,就是那种超缩减版的概率系统以及之前学习的知识。
做的基本上是那种普通的抽卡系统,我做的也是基于概率以及条件选择的文字游戏,自己选题选的是动物园规则怪谈,但由于选题太大以及人手、时间、经费不足,只能做了个超超超级删减魔改版,做的太晚了,所以没有去写每日一练。
题目:输入一个正整数n,打印前n行的杨辉三角。
先说一下杨辉三角:
1
1 1
1
2 1
1 3
3 1
1 4 6
4 1
先分析一下,边上是固定的1,中间可以组成一个小三角,每一个值是它头顶上的两个尖角值相加,例如:
2==1+1; 3==1+2;4==1+3;6==3+3;
思维过程:
1.我的第一反应是既然下面的数值取决于上面的数值,那我就用两个数组a[]、b[]以行为基准,一行一行交替进行输入、输出。
同时发现第一行有一个值,第二行有两个值,第三行有三个值.....
最开始给a[0]赋值1,输出后第一行后给下一行的边缘两个b[0]与b[m]赋值,再按条件给中间赋值。利用上下交换装置,使下一次输出b[],给两个a[0]与a[m]赋值,按条件给中间赋值。如此循环下去。
2.还有另一种用二维数组,直接将整个前n行全部计算出来,分为两边和中间的三角两个模块,这个可以自己去试一下。
3.还有一种用一维数组a[n]算出来的,这个我没有具体了解,有兴趣的可以自己去写一下。
/* 作业:打印杨辉三角 输入一个正整数n, 打印杨辉三角前n行; */ #include<stdio.h> int main() {
/*********定义与输入模块********/ int n,m,i,flag=0; printf("please input a data:");
scanf("%d",&n); int a[n],b[n]; a[0]=1; /***********执行模块**********/
for(m=1;m<=n;m++) { if(flag==0) { for(i=0;i<m;i++)//------------对a[n]的输出模块 {
printf("%-4d",a[i]); } printf("\n"); b[0]=b[m]=1;//----------------对b[n]的输入模块
for(i=1;i<m;i++) { b[i]=a[i-1]+a[i]; } flag=1;//---------------------上下转换装置 }
else if(flag==1) { for(i=0;i<m;i++)//------------对b[n]的输出模块 {
printf("%-4d",b[i]); } printf("\n"); a[0]=a[m]=1;//----------------对a[n]的输入模块
for(i=1;i<m;i++) { a[i]=b[i-1]+b[i]; } flag=0;//---------------------上下转换装置 } }
return 0; }