c - C编程中的二项分布系列
问题描述
我可以用下面的代码写出帕斯卡三角形。但我的愿望是打印**
(a+b)^p
** 系列。我的愿望如下。样本输出:
(a+b)^p for unfolding p = 5
1
a^1 + b^1
a^2 + 2*a^1*b^1 + b^2
a^3 + 3*a^2*b^1 + 3*a^1*b^2 + b^3
a^4 + 4*a^3*b^1 + 6*a^2*b^2 + 4*a^1*b^3 + b^4
a^5 + 5*a^4*b^1 + 10*a^3*b^2 + 10*a^2*b^3 + 5*a^1*b^4 + b^5
/******** 我的代码 *********/
#include <stdio.h>
long paskal(int,int);
int main()
{
int n=0;
int m=0;
int k=0;
int s=0;
printf("Enter number of rows:\n");
scanf("%d", &n);
for(k = 0; n >= k; k++) {
for(m = 0; k >= m; m++) {
long f = paskal(k, m);
if(k==1)
printf("%ld",f);
else
printf("a^%ld %ld b^%ld",k,f,k);
}
printf("\n");
}
return 0;
}
long paskal(int n, int i) {
if(n == i || i == 0)
return 1;
else
return paskal(n-1, i) + paskal(n-1, i-1);
}
/********输出**********/
Enter number of rows:
5
11
a^2 1 b^2a^2 2 b^2a^2 1 b^2
a^3 1 b^3a^3 3 b^3a^3 3 b^3a^3 1 b^3
a^4 1 b^4a^4 4 b^4a^4 6 b^4a^4 4 b^4a^4 1 b^4
a^5 1 b^5a^5 5 b^5a^5 10 b^5a^5 10 b^5a^5 5 b^5a^5 1 b^5
我为我的英语感到抱歉。谢谢你
解决方案
在您想要的输出中,我建议不要打印a
1 时的幂。所以a^1
可以是a
.
那么你可以这样做——如果你仍然想要它在输出中,if
删除它很简单^1
// Helper function
void factor(long f, char letter, int power) {
if (f != 1)
printf("*");
if (power != 0) {
printf("%c", letter);
if (power != 1)
printf("^%d", power);
}
}
int main() {
int n = 0;
printf("Enter number of rows:\n");
scanf("%d", &n);
if (n > 0)
printf("1\n");
for (int k = 1; k < n; k++) {
for (int m = 0; m <= k; m++) {
if (m != 0)
printf(" + ");
long f = paskal(k, m);
if (f != 1)
printf("%ld", f);
factor(f, 'a', k - m);
factor(f, 'b', m);
}
printf("\n");
}
return 0;
}
推荐阅读
- c# - 在c#中比较两个不同CSV文件的行值
- javascript - 无法将按钮单击分配给锚标记角度中的按钮
- excel - 使用 ADODB 从 Excel VBA 到 Oracle DB 的连接不再有效
- asp.net - 在 Xamarin 中更改 ListView 所选项目的背景颜色
- javascript - 需要与 Firebase Web 中的当前用户自动连接到辅助应用实例
- apache-spark - 在 pyspark 中将两个数据帧中的一个数据帧作为单独的子列
- javascript - 从数组列表中删除基于两个参数的对象
- reactjs - 反应 400 错误请求错误..我关注汉堡项目,无法传递配料数据
至 - sql - 当 B 与 A 匹配时,在表 A 上左连接表 B 是瞬时的,但当没有匹配时需要永远(> 1 分钟)。为什么是这样?
- linux - 当文件太长时,Vim undofile 不起作用