寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C #ITP1_7_B C言語による組み合わせの数

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?