[標準C+]2798ブラックジャック
7067 ワード
質問する
カジノで最も人気のあるゲームブラックジャックのルールはかなり簡単です.カードと21を超えない限度内で、カード和を最大限に拡大するゲームです.ブラックジャックはカジノごとに異なる規定を持っている.
韓国最高のブラックジャックの達人である金正仁(キム・ジョンイン)氏は、サングン、チャンヨン氏と新しいブラックジャックルールを制定し、ゲームを行う.
金正仁バージョンの黒いジャックには、カードごとに正の整数が書かれています.その後、ディーラーはすべてのN枚のカードを床に置いて、数字を表示します.そしてディーラーはデジタルMを叫んだ.
現在、プレイヤーは限られた時間内にN枚のカードの中から3枚のカードを選ばなければならない.ブラックジャック変形ゲームなので、プレイヤーが選択したカードの和はMを超えず、できるだけMに近づくようにします.
N枚のカードの数字が与えられている場合は、Mを超えずにMに最も近いカード3枚の合計を求めて出力してください.
入力
第1行は、カードの個数N(3≦N≦100)およびM(10≦M≦300000)を与える.2行目は、100000を超えない正の整数であるカードの数字を与えます.
3枚とMを超えないカードが見つかった場合のみ、入力として使用できます.
しゅつりょく
1行目は、Mに最も近い3枚のカードの合計を超えないように出力されます.
https://www.acmicpc.net/problem/2798
その結果、カードを3回繰り返し抽出することなく、Mに近い値(Mを含む)との最値を出力する.
入力したカードの数は最大100個までです.
100 x 99 x 98=>9万程度で、三重複文を書いても1秒以内に解決できます.
重複を避けるために,内部ではi,j,kがそれぞれ同じ場合を排除した.
#define _CRT_SECURE_NO_WARNINGS //scanf오류 없앰
#include <bits/stdc++.h>
int main(void) {
int cardNum, M, max = 0;
scanf("%d%d", &cardNum, &M);
int* card = new int[cardNum];
for (int i = 0; i < cardNum; i++){ //모든입력을 받음
scanf("%d", &card[i]);
}
for (int i = 0; i < cardNum; i++) {
for (int j = 0; j < cardNum; j++) {
if (i == j) continue; //중복X
for (int k = 0; k < cardNum; k++) {
if (k == j || i == k) continue; //중복 X
int sum = card[i] + card[j] + card[k];
if (sum > M) continue; //M을 넘으면 X
if (max < sum) max = sum; //최댓값 갱신
}
}
}
printf("%d", max);
}
Reference
この問題について([標準C+]2798ブラックジャック), 我々は、より多くの情報をここで見つけました https://velog.io/@cldhfleks2/2798テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol