杨辉三角 --- C语言程序
1、前言
最近在逛博客的时候发现一个特别有意思的三角形 然后便编写了下来。 它呢就是杨辉三角,也作为我的首篇博客吧
2、旅程开始
此处为网上所找到的公式以及各种概述,然而对于来说 然并卵 我并看不懂 ??? 相信各位应该也有和我一样的人。。。。。
1、首先呢 我们先不多说 先打一个简单的模板上去 (倒三角)
1 #include <stdio.h> 2 3 int main() 4 { 5 for (int i = 1; i <= 13; i++) 6 { 7 // 输出倒三角空格 8 for (int j=13; j>i; j--) 9 { 10 printf("--"); 11 } 12 printf("\n"); 13 } 14 15 16 return 0; 17 }
2、我们搭完一个模板后 我们是不是需要分析一下公式规律了
3、了解第二步之后 那我们就开始搭一个架子了哦 !!!!
#include <stdio.h> int main() { int upNumber = 1; //用来记录上一个数 for (int i = 1; i <= 13; i++) { upNumber = 1; // 输出倒三角空格 for (int j=13; j>i; j--) { printf(" "); } printf("1"); // 这是输出每一行的第一个1 for (int j = 1; j <= i - 2; j++) { // 原始数据 printf(" %i",upNumber = (i - j) * upNumber / j); } printf(" 1\n"); // 每一行的最后一个 1 } return 0; }
4、我们可以从上图看出只有第一行多了一个1对吧,然而其余的并没有多、或者少 只是排版排的不怎么样 歪歪扭扭的待会儿我会一一告诉大家 ? ? 那么我们先来解决1一个问题吧(我们可以判断i是否等于1 如果等于就不让它执行,如果不等于就执行是吧 等等方法形式 对吧!)
1 // 判断是否第一次进来 如果是第一次进来就输出1就可以了 2 if (i!=1) { 3 printf("1"); // 这是输出每一行的第一个1 4 for (int j = 1; j <= i - 2; j++) 5 { 6 printf(" %i",upNumber = (i - j) * upNumber / j); 7 } 8 printf(" 1\n"); // 每一行的最后一个 1 9 } 10 else 11 { 12 printf("1\n"); //第一行的1 13 }
5、代码写到这 形状就差不多到这了 剩下的就是排版的问题了是吧 !!!
6、排版嘛 就是空格的多少 百位数的就是一个空格 十位数的就是两个空格 至于是一位数的话 那么就是一个空格了哦 怎么知道是百位或者十位还有个
位 那就取决于它位数的多少了 因为刚开始学 不知道什么内部的方法或者什么函数的 然后只能自己想了哦
首先上一个例子吧 然后在展图
int count = 1; //用来计数的多少 默认是1 int sum = 100; //给一个默认的百位数 //给它一个循环 条件为sum大于等于10那么就继续循环 while(sum>=10) { sum/=10; //除以10 count++; //只要进来一次就加一次 } //如果执行完的话 那么Count的值为3
最后一个忘记写了 空格为3个 此处为所有代码
1 #include <stdio.h> 2 3 int main() 4 { 5 int upNumber = 1; //用来记录上一个数 6 int count = 1; //排序时用来记录数字的长度 7 int sum =0; //排序时用来计算的变量 8 for (int i = 1; i <= 13; i++) 9 { 10 upNumber = 1; 11 // 输出倒三角空格 12 for (int j=13; j>i; j--) 13 { 14 printf(" "); 15 } 16 // 判断是否第一次进来 如果是第一次进来就输出1就可以了 17 if (i!=1) { 18 printf("1"); // 这是输出每一行的第一个1 19 for (int j = 1; j <= i - 2; j++) 20 { 21 // -----------------用来排序----------------- 22 sum = upNumber = (i - j) * upNumber / j; 23 while(sum>=10) 24 { 25 sum/=10; 26 count++; 27 } 28 if (count==3) { 29 printf(" %i",upNumber); 30 count=1; 31 }else if (count==2) 32 { 33 printf(" %i",upNumber); 34 count=1; 35 }else 36 { 37 printf(" %i",upNumber); 38 count=1; 39 } 40 // -----------------排序结束并输出------------ 41 // 原始数据 42 // printf(" %i",upNumber = (i - j) * upNumber / j); 43 } 44 printf(" 1\n"); // 每一行的最后一个 1 45 } 46 else 47 { 48 printf("1\n"); //第一行的1 49 } 50 } 51 return 0; 52 }
以上纯属个人浅见,第一次写博客不懂如何排版,所以如此之丑,见谅