打印杨辉三角,会的来看看哪里错了
输入行数,打印杨辉三角:如输入 5 则打印输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 3 1
但是我的却这样输出:
1
1 1 1
1 2 2 2 1
1 2 2 2 2 2 1
1 4 4 4 4 4 4 4 1
我的代码如下,帮忙改改吧,
#include "stdio.h"
main()
{
int i,j,k,l,n;
int a[1000];
l=0;
k=0;
printf("please input a number:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n+i-1;j++)
{
if(j<=n-i)
printf(" ");
else
{
if(j==n-i+1||j==n+i-1)
{
a[k]=1;
printf("%d ",a[k]);
k++;
}
else
{
a[k]=a[k-3-l]+a[k-2-l];
printf("%d ",a[k]);
k++;
l++;
}
}
}
printf("\n");
}
}
----------------解决方案--------------------------------------------------------
书上就有
----------------解决方案--------------------------------------------------------
可是我的书上没有啊
----------------解决方案--------------------------------------------------------
这代码多 你搜下 帮我的看看
----------------解决方案--------------------------------------------------------
杨辉三角
#include<stdio.h>void main()
{
int a[10][10],i,j;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
----------------解决方案--------------------------------------------------------
1 程序书写不错 但是算法有问题,试试二维数组。还有加点注释吧,方便自己理解。
我的解法:
#include <stdio.h>
#include <math.h>
void main()
{
int i;//counter
int j;//counter
int k;//counter
int yhAngle[100][100]={0};//define & initialize two-dimensional array 定义并初始化二维数组
int rows=0;//yhAngle's rows杨辉三角的行数
printf("Please enter the rows of the yhAngle:\n");//input the rows 输入行数
scanf("%d",&rows);
for (i = 0;i < rows;i++)//initialize the first line to be 1 初始化第一列元素为1
{
yhAngle[i][0] = 1;
}
for (i = 1; i < rows; i++) //evaluate yhAngle 为二维数组赋值
{
for (j = 1; j <= i; j++) //j <= i 对角线结束
{
if (i == j)
{
yhAngle[i][j] = 1;
continue;
}
yhAngle[i][j] = yhAngle[i-1][j-1] + yhAngle[i-1][j];
}
}
for (i = 0; i < rows; i++) //print yanghui Angle 打印杨辉三角
{
for(k=1; k <= fabs(rows-i); k++)//make space
{
printf(" ");
}
for (j = 0; j <= i; j++)//print mumber打印数字
{
printf("%2d",yhAngle[i][j]);
}
printf("\n");
}
}
----------------解决方案--------------------------------------------------------
#include <iostream>
#include <math.h>
using namespace std;
int a[100];
void make(int n,int w)
{
int prev=0,tab=(n+1)*w>>1;
if (w%2)w++;
for (int i=1;i<=n;i++)
{
printf("%*c",tab-=w>>1,' ');
for (int j=0;j<i;j++)
{
if (j==0 || j==i-1)prev=a[j]=1;
else {int t=prev;prev=a[j];a[j]+=t;}
printf("%*d",w,a[j]);
}
printf("\n");
}
}
int main()
{
make(12,4);
}
自己第三次写这个程序,空间复杂度从n^2到2*n到现在的n。很有些感悟……
----------------解决方案--------------------------------------------------------
tab=(n+1)*w>>1
移位的作用是什么??
----------------解决方案--------------------------------------------------------
这个是为了好看做的排版控制。你算几个tab出来就知道了……
----------------解决方案--------------------------------------------------------