为了显示我还是在写题解的,虽然今天偷懒了…但我尽量要日更!!立个flag,我明天一定要把8.8题解写完!再拖下去…就…没然后了…hhh
C - 杨辉三角
HDU 2032
题目:
还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
Input
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。
Output
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
Sample Input
2 3
Sample Output
1
1 1
1
1 1
1 2 1
思路:
找规律(小学数学题找规律)
AC代码:
#include <iostream> #include <cstring> using namespace std; int dp[40][40]; int main() { int n; while(cin>>n) //n相当于是行数
{ memset(dp,0,sizeof(dp)); //dp数组,初始化为0,dp数组的长度为sizeof(dp) for(int i=1;i<=n;i++) // i 相当于是行
{ for(int j=1;j<=i;j++) // j 相当于是列,这里要注意j只能是小于或等于i的,这算杨辉三角的一个特性吧,看图就能看出来的
{ if(j==1) //如果列等于1,换句话说就是第一列的情况
{ dp[i][j]=1; //第一列里,所有的数都为1 } else
? { ? dp[i][j]=dp[i-1][j-1]+dp[i-1][j]; //否则…这算是推出的一个规律hhh ? } ? cout<<dp[i][j]; ? if(j!=i)
? cout<<" ";
? } ? cout<<endl; ? } ? cout<<endl; ? } ? return 0; }
注:
关于memset函数
网上有关memset的解释emmm一言难尽,稍微总结了一下~~(其实是想要用比较通俗的方法概括一下)~~
memset(a,val,sizeof(a))初始化一个int数组a,该语句把数值val(0x00~0xFF)填充到数组a的每个字节上,而1个int占用4个字节,所以用memset只能赋值出“每8位都相同”的int(来自蓝书)
头文件:#include <cstring> 模板:例如你定义了一个一维数组int a[1000];
你可以这样初始化全为0 memset(a,0,sizeof(a)); //括号中分别是(数组名,要初始化的数,数组的长度可以用sizeof来求) 但是要注意,初始化不可以初始任何值,是因为memset初始化方式是是按字节。如果memset想把一个数组初始化为很大,可以 memset(a,0x3f,sizeof(a)); 或者memset(a,0x3f3f3f3f,sizeof(a)); 其结果都是初始化为0x3f3f3f3f,即为1061109567。
|