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배열을 동적으로 할당할 방법을 마땅치 알지 못한것이 아쉽다. 🥲