/* 漸化式(nCrの計算) n個の中からr個を選ぶ組み合わせの数 nCrを求める. nCr=(n-r+1)/r nC_{r-1} nC0=1 0C0=1 1C0=1 1C1=1 2C0=1 2C1=2 2C2=1 3C0=1 3C1=3 3C2=3 3C3=1 4C0=1 4C1=4 4C2=6 4C3=4 4C4=1 5C0=1 5C1=5 5C2=10 5C3=10 5C4=5 5C5=1 */ #includelong combi(int,int); main() { int n,r; for (n=0;n<=5;n++) { for (r=0;r<=n;r++) printf("%dC%d=%ld ",n,r,combi(n,r)); printf("\n"); } } long combi(int n,int r) { int i; long p=1; for (i=1;i<=r;i++) p=p*(n-i+1)/i; return p; }
/* Hornerの方法 多項式 f(x)=a_n x^n + a_{n-1}x^{n-1}+ ... + a_1x+a_0 の値を Hornerの方法を用いて計算する。 f_i=f_{i-1}x+a_{n-i} f_0=a_n fn(1.000000)=15.000000 fn(2.000000)=129.000000 fn(3.000000)=547.000000 fn(4.000000)=1593.000000 fn(5.000000)=3711.000000 f(x)=5x^4+4x^3+3x^2+2x+1 */ #includedouble fn(double,double *,int); main() { static double a[]={1,2,3,4,5}; /* 係数 */ double x; for (x=1;x<=5;x++) printf("fn(%f)=%f\n",x,fn(x,a,4)); } double fn(double x,double a[],int n) { double p; int i; p=a[n]; for (i=n-1;i>=0;i--) p=p*x+a[i]; return p; }
/* Pascalの三角形 nCr={n-1}_C_{r-1}+{n-1}_C_r 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1 1 12 66 220 495 792 924 792 495 220 66 12 1 */ #include#define N 12 long combi(int,int); main() { int n,r,t; for (n=0;n<=N;n++){ for (t=0;t<(N-n)*3;t++) /* 空白 */ printf(" "); for (r=0;r<=n;r++) printf("%3ld ",combi(n,r)); printf("\n"); } } long combi(int n,int r) { int i; long p=1; for (i=1;i<=r;i++) p=p*(n-i+1)/i; return p; }
Back to C Language