C言語による組み合わせの数です。
複数のデータセットから、重複しない3つの数を選び、それらの合計が x となる組み合わせの数を求めるプログラムです。
・問題
1 から n までの数の中から、重複無しで3つの数を選びそれらの合計が x となる組み合わせの数を求めるプログラムを作成して下さい。
例えば、1 から 5 までの数から3つを選んでそれらの合計が 9 となる組み合わせは、
1 + 3 + 5 = 9
2 + 3 + 4 = 9
の2通りがあります。
・入力される値
複数のデータセットが入力として与えられます。
各データセットでは、空白で区切られた m、f、r が 1 行に与えられます。
m、f、r がすべて -1 のとき入力の終わりとします。
データセットの数(生徒の数)は 50 を超えません。
・期待する出力
複数のデータセットが入力として与えられます。
各データセットでは、空白で区切られた n、x が 1 行に与えられます。
n、x がともに 0 のとき入力の終わりとします。
僕が作成、提出したコードは、以下のとおりです。
/* ITP1_7_B : How many ways? http://judge.u-aizu.ac.jp/ C言語による組み合わせの数 https://neguse-atama.hatenablog.com */ #include<stdio.h> int main(void){ int n,x,y; int a,b,c; int ans; while(1){ scanf("%d %d",&n,&x); if(n==0 && x==0){ break; } ans=0; y=x; if(y>n){ y=n; } for (a=1;a<=y;a++){ for (b=a+1;b<=y;b++){ c=x-a-b; if (c>b && c<=n){ ans++; } } } printf("%d\n",ans); } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
ITP1_7_B : How many ways?