2016-10-25 4 views
0

パスカル・トライアングルを作成するためのプログラムを作成しました。数字(行)> 5の入力に対しては、ncr> 10の整列問題があります。 私はプログラムの出力のための画像を含んでいます。パスカル・トレイルの数字の正しい整列

Output Image

#include<stdio.h> 
int factorial(int number) 
{ 
    int fact=1; 
    for(int i=1; i<=number; ++i) 
    { 
     fact*=i; 
    } 
    return fact; 
} 

int ncr(int n, int r) 
{ 
    int ncr; 
    int fact1=factorial(n); 
    int fact2=factorial(n-r); 
    int fact3=factorial(r); 
    ncr = fact1 /(fact2 * fact3); 
    return ncr; 
} 


int main() 
{ 
    int rows; 
    printf("enter the number of rows :\n"); 
    scanf("%d",&rows); 
    for(int n=0; n<rows; n++) 
    { 
     for(int i=1; i<=rows-n; i++) 
     { 
      printf(" "); 
     } 
     for(int r=0; r<=n; r++) 
     { 
      printf("%d ",ncr(n,r)); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+0

空白と[printf'](http://en.cppreference.com/w/c/io/fprintf)形式の修飾子(フィールドの幅や配置など)を試してみてください。 –

+0

ヒント:値を行列に格納するので、線の数をあらかじめ計算して、印刷結果を整列させることができます。 – LPs

+0

'ncr'関数は入力値> 10で簡単にオーバーフローすることがあります。 – mch

答えて

1

あなたはこれが9行件まで動作します。この

for(int i=1; i<=rows-n; i++) 
{ 
    printf(" "); // Note the extra space 
} 
for(int r=0; r<=n; r++) 
{ 
    printf("%3d ",ncr(n,r)); // Changed to %3d 
} 

のような内側のループを変更することができます。それ以上の行を処理したい場合は、最初のprintfに別のスペースを追加し、2番目のprintfを%5dに変更することができます。

+0

ご協力いただきありがとうございます! –

1

printfは、 printf("%d ",ncr(n,r));printf("%3d ",ncr(n,r));に変更して、3文字幅の数字にします。またprintf(" ");printf(" ");に変更してください。

+0

お世話になりました! –

関連する問題