PAT 1030パーフェクト数列(25)

3304 ワード

正の整数数列と正の整数pを与え、この数列の最大値をM、最小値をmとし、M<=m*pの場合、この数列を完全な数列と呼ぶ.
パラメータpといくつかの正の整数が与えられ、そこからできるだけ多くの数を選択して完璧な数列を構成してください.
入力形式:
1行目の入力には2つの正の整数Nおよびpが与えられ、ここでN(<=105)は入力された正の整数の個数であり、p(<=109)は与えられたパラメータである.2行目の入力にはN個の正の整数が与えられ、各数は109を超えない.
出力フォーマット:
1行の出力で最大何個の数を選択して完璧な数列を構成できます.
入力サンプル:10 8 2 3 20 4 5 1 6 7 8 9出力サンプル:8
一、配列中の最大値を探し出す
int MaxPAT(int list[], int len){
    int mx = list[0];
    for (int i = 0; i < len; ++i){
        if (mx < list[i]){ mx = list[i]; }
    }
    return mx;
}

二、配列中の最小値を探し出す
int MinPAT(int list[], int len){
    int mx = list[0];
    for (int i = 0; i < len; ++i){
        if (mx > list[i]){ mx = list[i]; }
    }
    return mx;
}

三、主関数
void PAT1030(){
    int N = 10, p = 8,counts=0;
    int max = 0, min = 0;
    int num[10000] = { 2, 3, 20, 4, 5, 1, 6, 7, 8, 9 };
    sort(&num[0], &num[9]+1);
    for (int i = 1; i <= 10; ++i){
            max = MaxPAT(num, i);
            min = MinPAT(num,i);
            if (max <= min*p){ ++counts; }  //    ,     
    }
    cout << counts << endl;
}