N5. 白駿2798
白俊の問題は久しぶりです。😎
問題に示すように,与えられた3つの数を統合し,最も近い数を出力するためにコードを記述しなければならない.
ここの問題.
3つの乱数の和は、与えられたm値を超えないように最大でなければならない.
また、3つの数字をランダムに抽出する方法が重要です.
じゃあ...まず、出力するためにnとmの範囲を簡単に指定します.
Scanner scan = new Scanner(System.in);
int n, m;
for( ; ; ) {
n = scan.nextInt();
if(3 <= n && n <= 100)
break;
}
for( ; ; ) {
m = scan.nextInt();
if(10 <= m && m <= 300000)
break;
}
はい、無限ループにして、適切に書けば入力させてください.そしてね.
1.まず、ユーザが入力したn個の値を受信する配列を作成します.
2.3つの数字を抽出し、配列を生成し、それを加算します!
ここでのポイントは,n個の数字と,n個のfor文を生成することである.
△ええと、もっと簡潔な方法を考えなければなりません.
int[] arr, b;
arr = new int[n];
b = new int[m*100];
for(int i=0; i<arr.length; i++) {
arr[i] = scan.nextInt();
}
int c = 0;
for(int i=0; i<arr.length; i++) {
for(int j=i+1; j<arr.length; j++) {
for(int s=j+1; s<arr.length; s++) {
int a = arr[i] + arr[j] + arr[s];
if( a <= m ) b[c] = a;
c++;
}
}
}
筆者は,上記の3つの問題を含むコードをこのように記述した.もっと毒性があってきれいになりたいけど、今は一番いいです.ほほほ
m値を超える数値を格納しないようにします.
最後に、格納された数の中で最大のmax値を見つけて終了します.
int max = b[0];
for(int num : b) {
if(num > max) max = num;
}
System.out.println(max);
これで終わりです.ここで,入力値の3つと必要数を超えない場合に,このアルゴリズムを用いて最大引数を解く.<フルコード>
import java.util.Scanner;
public class Main01 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n, m;
for( ; ; ) {
n = scan.nextInt();
if(3 <= n && n <= 100)
break;
}
for( ; ; ) {
m = scan.nextInt();
if(10 <= m && m <= 300000)
break;
}
int[] arr, b;
arr = new int[n];
b = new int[m*100];
for(int i=0; i<arr.length; i++) {
arr[i] = scan.nextInt();
}
int c = 0;
for(int i=0; i<arr.length; i++) {
for(int j=i+1; j<arr.length; j++) {
for(int s=j+1; s<arr.length; s++) {
int a = arr[i] + arr[j] + arr[s];
if( a <= m ) b[c] = a;
c++;
}
}
}
int max = b[0];
for(int num : b) {
if(num > max) max = num;
}
System.out.println(max);
}
}
ps. 한가지 걸리는 부분은 아무래도 3개의 수 합이 담길 b배열을 동적으로 할당할 방법을 마땅치 알지 못한것이 아쉽다. 🥲
Reference
この問題について(N5. 白駿2798), 我々は、より多くの情報をここで見つけました https://velog.io/@jln0616/백준-2798번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol