| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1131 人关注过本帖
标题:杨辉三角(未完成)
只看楼主 加入收藏
子夜狂人
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-1-25
收藏
 问题点数:0 回复次数:5 
杨辉三角(未完成)

打印出杨辉三角我可以用排列组合来做,但是那样很浪费空间,而且即使是用长整型数字做,由于阶乘得到的数太大,我也只能做出10几行。
我下面想要做的是不用排列组合的方法来打印出杨辉三角,但是在调用函数时出现了问题,希望各位大虾能指导一下。如果有更好的做法还希望能分享一下。谢谢!


main()
{
int c(int a,int b);
int i,j,k,n;
scanf("%d",&n); /*n为打印的行数*/
i=1; /*设当前打印行数为i*/
do
{
for (k=0;k<n;k++)
printf(" "); /*为打印出三角的图形而填补空格*/
for (j=0;j<=i;j++) /*设当前打印列数为j*/
{
if (c(i,j)<10)
printf(" %d",c(i,j));
else
if (c(i,j)<100)
printf(" %d",c(i,j));
else
printf("%d",c(i,j));
}
i++;
printf("/n");
}
while (i<=n);
}
int c(int a,int b) /*函数是从c(1,0)和c(1,1)开始的应该可以递归回来*/
{
if (b==0||a==b)
c(a,b)=1;
else
c(a,b)=c(a-1,b-1)+c(a-1,b);
return c(a,b);
}


错误 d:\下栽游戏\abm\bin\008.c 30: 需要用L值 在函数
错误 d:\下栽游戏\abm\bin\008.c 32: 需要用L值 在函数

不明白“需要用L值”是什么意思,我也看了版主 “ 卧龙孔明” 的 “用C语言求出了十万的阶乘结果 ”
里面的
if(num>=10L) h--;
if(num>=100L) h--;
if(num>=1000L) h--;
if(num>=10000L) h--;
中的"L"是不是跟这个是一回事呢?


搜索更多相关主题的帖子: 杨辉三角 int 打印 做法 
2007-01-28 13:57
lindongxiao
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-1-28
收藏
得分:0 
L是长整数,
杨辉三角用递归不是更麻烦,
都是错的
c(a,b)=1 不能这样用吧;
else
c(a,b)=c(a-1,b-1)+c(a-1,b);
return c(a,b);
怕浪费可以用动态分配
比如int **s的数组 int **s;
s=(int**)malloc(sizeof(int*)*5);
s[0]=(int*)malloc(sizeof(int)*4);//分配了4个分配是s[0][0],s[0][1]....s[0][3]
s[1]=(int*)malloc(sizeof(int)*2);////分配了2个分配是s[1][0],s[1][1]


2007-01-28 15:27
hiaod
Rank: 1
等 级:新手上路
威 望:1
帖 子:66
专家分:0
注 册:2007-1-25
收藏
得分:0 

俺改了一下,可以正确输出18行,这时的最大值没有超出无符号长整形数的范围。受屏幕宽度的限制,在屏幕上能够正常显示却只有15行。

#include <stdio.h>

int main()
{
int c(int a,int b);
int width(unsigned long num);
int i,j,k,n,m,d,z = 0;
unsigned long temp;
printf("Please input a integer:");
scanf("%d",&n); /* n为打印的行数 */
temp = c(n,n/2);
z = width(temp); /* 最大数的位数 */
i = 0; /* 设当前打印行数为i */
do
{
for(m = n; m >= 0; m--)
{
for (k = 0; k < m; k++)
printf(" "); /* 为打印出三角的图形而填补空格 */
printf("1");
for (j = 1; j <= i; j++) /* 设当前打印列数为j */
{
temp = c(i,j);
switch (z - width(temp))
{
case 0: printf(" %lu",temp);break;
case 1: printf(" %lu",temp);break;
case 2: printf(" %lu",temp);break;
case 3: printf(" %lu",temp);break;
case 4: printf(" %lu",temp);break;
case 5: printf(" %lu",temp);break;
case 6: printf(" %lu",temp);break;
case 7: printf(" %lu",temp);break;
case 8: printf(" %lu",temp);break;
case 9: printf(" %lu",temp);break;
}
}
i++;
printf("\n");
}
} while (i <= n);
return 0;
}

int c(int a,int b) /*函数是从c(1,0)和c(1,1)开始的应该可以递归回来*/
{
if (b == 0 || a == b)
return 1;
else
return c(a-1,b-1) + c(a-1,b);
}

int width(unsigned long num) /* 求一个整数的位数 */
{
int s = 0;
while(num > 0)
{
s++;
num /= 10;
}
return s;
}

2007-01-28 17:21
子夜狂人
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-1-25
收藏
得分:0 
还是不懂
看了hiaod的帮助我知道了我的
int c(int a,int b)
{
if (b==0||a==b)
c(a,b)=1;
else
c(a,b)=c(a-1,b-1)+c(a-1,b);
return c(a,b);
}
应该怎么该了
可是还是不懂为什么“c(a,b)=1;”,这样直接赋植给函数最后才一起返回不行,而是要直接返回才行呢?
2007-01-29 00:40
baiqie
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-1-19
收藏
得分:0 
我想杨辉三角中,只要把第一、二行和第一、二列单独提出来用for输入,而中间的用for [j][i-1]+a[j-1][i]这个公式来计算
那样不管有多少行多少列都可以输出来
2007-01-29 13:12
张君
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:57
专家分:113
注 册:2010-5-13
收藏
得分:0 
#include<stdio.h>
main()
{
int i,j,k,a[8][8];
clrscr();

for (i=0;i<8;i++)
   {
    a[i][0]=1;
    a[i][i]=1;
   }
for(i=2;i<8;i++)
  {
     for(j=1;j<i;j++)
     a[i][j]=a[i-1][j-1]+a[i-1][j];
   }
 for(i=0;i<8;i++)
    {
    for(j=0;j<=i;j++)
      printf(" %d",a[i][j]);
      printf("\n");
    }
}

做自己就好,保持自己,记得微笑
2010-05-24 14:39
快速回复:杨辉三角(未完成)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025016 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved