• 締切済み

次のプログラムは、n個の中からr個とる組み合わせが何通りあるか求め出力

次のプログラムは、n個の中からr個とる組み合わせが何通りあるか求め出力するものである。 ただしこの組み合わせは次のようにけいさんするものである nCr=n!/r!×(n-r)! ○の中にあてはまる数値や文字を教えてください C言語です #include<stdio.h> void main(void) { int a,b,n,r,cnt; int kumiawase; a=○; b=1; printf("n=10"); scanf("%d",&n); printf("r=3"); scanf("%d",&r); for(cnt=n;cnt>1;cnt--){ a=○; } for(cnt=r;cnt>1;cnt--){ b=b*cnt; } for(cnt=○;cnt>1;cnt--){ b=b*cnt; } kumiawase=○/○ printf("%d個から%d個とる組み合わせ=%d\n",n,r,kumiawase); }

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

3つのりんごABCから2つ取る組み合わせは? これならわかりますよね?。事例はあるので、あてはめてじっくり考えたら解けます。 ここでは、組み合わせの式を四則演算で表記できるかがポイントです。でないと答えだけ聞いても理解不十分、でしょう。 例)3!=1×2×3=6

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どの部分で「その式」の何を計算しているのか, じっくり見てください. その上で, どうしてもわからないなら「分からない点」をきちんと書いて再度質問してください.

関連するQ&A

  • (プログラムがあるため長文です)次の2つの違いは?

    C言語(VisualStudio.net2003)で組み合わせに関するプログラムを作成したのですが、(1)の式で、プログラムを実行させると、違う結果が出てしまい、(2)の式で実行させると、正しい結果が出ます。 (1)(コピーして、確認(実行)してみてください) #include <stdio.h> int main ( void ) { int n,r,k; int a=1; printf("n=?");scanf("%d",&n); printf("r=?");scanf("%d",&r); for ( k=1 ; k<=r ; k++){ a *= (n-k+1)/k; printf("a%d=%d\n",k,a); } return 0; } (2)a *= (n-k+1)/k; の部分を a = a*(n-k+1)/k; に変更する。 a *= (n-k+1)/k;という式が、a = a*(n-k+1)/k;ということを意味しているので、どちらでも正しい結果がでる気がするのですが、なぜ(1)では正しく結果が表示されないのでしょうか?教えてください。 また、(1)のような *= をつかってプログラムを組みたいとき、a *= (n-k+1)/k; をどのように変更すればよいのでしょうか?

  • ネイピア数(e)のプログラム

    テイラー展開によってネイピア数の近似値を求める プログラミングが全くわかりません。 e = 2.71828 18284 59045 23536 02874 71352 … を計算したいのですが。 #include <stdio.h> #include <math.h> int kaijou(int p) { int cnt; int val=1; for(cnt=1 ; cnt<=p ; cnt++){ val=val*cnt; } return(val); } double napier(int p) { printf("eを計算します。E = (1+(1/k))^k\n"); printf("k=いくつまで計算しますか ?\n"); scanf("%d", &n); double E[n]; E[1] = 1; for (j = 1; j <= n; j++){ E[j] = E[j] + 1; } for (k = 1; k <= n; k++) { K = K + 1; A = 1 / K; // printf("A = %e, ",A); B = 1 + A; // printf("B = %e\n",B); for ( i = 1; i<=k; i++){ E[k] = E[k] * B; // printf("E[%3d]= %e\n",k,E[k]); } void main(void) { int n; int cnt; double answer; printf("計算する最大の項nを入力してください:"); scanf("%d",&n); for(cnt=1 ; cnt<=n ; cnt++){ answer=napier(cnt); printf("第%d項までの近似値:%f 真値:%f 差:%f\n",cnt,answer,exp(1),answer-exp(1)); } }

  • n次の奇数魔方陣をつくるプログラム

    どうしてもエラーが出てしまいます。少なくとも、「int mahojin[n+1][n+1],i,j,k;」あたりの行が間違っているらしいのですが、なぜだかわかりません。アドバイスお願いします!!(スペースが上手く入らなくて、全角スペースを使ってますが気にしないでください。) #include<stdio.h> int main(void) {  int n;  printf("n(ただし、nは奇数)=?");scanf("%d",&n);  int mahojin[n+1][n+1],i,j,k;  j=(n+2)/2;i=0;  for(k=1;k<=n*n;k++){     if((k%n)==1)      i++;     else {      i--;j++;     }     if(i==0)      i=n;     if(j>n)      j=1;     mahojin[i][j]=k;   }   printf(" %d次の魔方陣 \n",n);   for(i=1;i<=n;i++){     for(j=1;j<=n;j++)      printf("%4d",mahojin[i][j]);     printf("\n");   }   return 0; }

  • nCrはどうあらわせばい??

    キーボードから二つの正の整数n,r を入力し,組み合わせの数nCr を計算して画面表示するプログラムを作成せよ.ただし,組み合わせの数を計算する関数のプロトタイプをint combination( int, int )とし,my_scanf()をキーボードから二つの正の整数n,r を入力する関数,kaijo() を階乗を求めるプログラムとする. という問題なんですが #include <stdio.h> int my_scanf(void){ int n; do{ scanf("%d",&n); }while(n <= 0); return n; } int kaijo(int m){ int i,x = m; for(i=1;i<m;i++){ x *= i; } return x; } int combination( int m, int w){ int ncr; ncr = m/w; return ncr; } int main (void){ int pos,sum_n,sum_r,answer; printf("n = "); pos = my_scanf(); sum_n = kaijo(pos); printf("r = "); pos = my_scanf(); sum_r = kaijo(pos); answer = combination(sum_n,sum_r); printf("nCr = %d",answer); return(0); } 結果的にはn!/r!を求めるプログラムに・・・・。 combination関数内を書き直せばいいのでしょうか?

  • プログラムの中から別なプログラムを実行する

    現在、プログラムAを利用しています。プログラムAを何度も実行するようループ処理を加えたいのですが、インクルードファイルが行方不明になり、プログラムAのソースに手を加えてコンパイルすくことが出来なくなりました。 そこで、プログラムBを作り、その中からAを実行することでループさせたいのですが可能なのでしょうか?もし可能ならどのようにすればいいのか教えてください。よろしくお願いします。 プログラムAは次のようになっています。 #include <stdio.h> int avn; int nos; float fac; char fh[20]; void main(void){ printf(" input average number \n "); printf("0=>100,1=>200,2=>500,3=>1000 shots \n"); printf(" 10, 20, 50, 100 sec \n"); printf(" number = "); scanf("%d",&avn); printf(" number of records = "); scanf("%d",&nos); printf(" number / factor = "); scanf("%f",&fac); printf(" file head = "); scanf("%s",fh); printf("%d,%d,%f,%sが設定されました",avn,nos,fac,fh); } printf文の所には本来別の処理が入ります。

  • 次のプログラムが作れません…

    キーボードから与えられた整数iに対して、iの階乗(i!)を求める関数"fact"を作成するというものなのですが… メイン関数は次のように与えられています。 #include<stdio.h> int fact(int); int main(void){ int in, i; printf("Input a number:"); scanf("%d",&in); for (i=1; i<=in; i++){ printf(" %d %d\n",i , fact(i) ); } return 0; } よろしくお願いします。

  • 異なるn個の整数からr個の整数を取り出す組み合わせ

    異なるn個の整数からr個の整数を取り出す組み合わせの数 nCrを求める関数 int combination(int n, int r){ /* ・・・ */} を作成せよ。なおnCrは以下のように定義される。 nCr = n-1Cr-1 + n-1Cr (ただし nC0 = nCn =1、nC1 =n ) (新版 明解C言語 入門編(柴田望洋 著) P.197 演習8-6) というので答えが int combination(int n, int r) { if((n>r) && (r>0)){ return combination(n-1,r-1) + combination(n-1,r); } else if(n==r || r==0){ return 1; } } ・という風になると教えてもらったのですがなぜこうなるのかが分かりません。 ・else if(n==r || r==0){ というのは削っても正常に動きますが、必要な物なのでしょうか? ・またifを使うときは if→eise if →else の順に使って 2つの時は if→else と使っていたのですが 上のものはif→else ifと書いています。 加えてelse(n==r || r==0){ と書いたらコンパイルエラーになってしまいました なぜelse ifと書くのでしょうか? 以上3点について教えてください。よろしくお願いいたします。

  • C言語

    このプログラムを作りたいのですが… ??????????? 物の総数を入れてください:12 取り出す物の数を入れてください:2 12個の異なる物から2個をを取り出す組み合わせの数は66です ?????????????? ここに出てくる数字は scanfで入れます。 だいたい こんな感じだと思うのですが… ***********の部分が わかりません。 ??????????????? #include<stdio.h> int factorial(int m,int r) { ************** } int main(void) {int a,b; printf("物の総数を入れてください:") scanf("%d",&a); printf("取り出す物の数を入れてください:") scanf("%d",&b); printf("12個の異なる物から2個を取り出す組み合わせの数は%dです。\n",a,b,factorial(a,b));) ?????????????? お願いします(>_<)

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • 組み合わせ

    aに100、bに20や2を入力すると プログラムが停止します。 計算できるように御指摘お願いします。 以下のプログラムです。 #include<stdio.h> int factrical(int n){ if(n>0){ /*printf("%d\n",n);*/ return (n*factrical(n-1)); } else{ return(1);} } int combination(int n ,int r){ return(factrical(n)/(factrical(n-r)*factrical(r))); } int main (void){ int a,b,c; printf("二つの数を入力してください。\n"); do{ printf("大きい方の数を入力してください。\n"); scanf("%d",&a); scanf("%d",&b); }while(a<b); c=combination(a,b); printf("%d",c); return(0);}

専門家に質問してみよう