Questions du test Blue Bridge Cup Questions du test précédent Chocolat divisé (Solution Java)

Questions du test Blue Bridge Cup Questions du test précédent Chocolat divisé (Solution Java)

Description du problème

Lors de la Journée des enfants, les enfants K ont visité la maison de Xiao Ming en tant qu'invités. Xiao Ming a sorti une collection de chocolats pour divertir les enfants.
Xiao Ming a N morceaux de chocolat au total, et le i-ème morceau est un rectangle formé par des carrés Hi x Wi.

Pour être juste, Xiao Ming doit découper K morceaux de chocolat des N morceaux de chocolat à partager avec les enfants. Le chocolat coupé doit répondre:

  1. La forme est carrée et la longueur du côté est un entier
  2. Même taille

Par exemple, un morceau de chocolat 6x5 peut être coupé en 6 morceaux de chocolat 2x2 ou 2 morceaux de chocolat 3x3.

Bien sûr, les enfants espèrent tous que le chocolat qu'ils reçoivent est aussi gros que possible. Pouvez-vous aider Little Hi à calculer la longueur maximale des côtés?

Format d'entrée

La première ligne contient deux entiers N et K. (1 <= N, K <= 100000)
Chacune des N lignes suivantes contient deux entiers Hi et Wi. (1 <= Salut, Wi <= 100000)
Entrez pour vous assurer que chaque enfant peut obtenir au moins un chocolat 1x1.

Format de sortie

Sortez la longueur de côté maximale possible du chocolat carré coupé.

Exemple d'entrée

2 10
6 5
5 6

Exemple de sortie

2

Code

import java.util.Scanner;

public class Main {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		// n 块巧克力,k 个小朋友
		int n,k;
		n = sc.nextInt();
		k = sc.nextInt();
		int[] h = new int[n];
		int[] w = new int[n];
		int maxh,maxw;
		h[0] = sc.nextInt();
		w[0] = sc.nextInt();
		maxh = h[0];
		maxw = w[0];
		for (int i = 1; i < n; i++) {
    
    
			h[i] = sc.nextInt();
			w[i] = sc.nextInt();
			if(h[i] > w[i]) {
    
    
				int temp = h[i];
				h[i] = w[i];
				w[i] = temp;
			}
			if(h[i] > maxh) maxh = h[i];
			if(w[i] > maxw) maxw = w[i];	
		}
		int max = maxw < maxh ? maxw : maxh;
		
		while(max >= 1) {
    
    
			int count = 0;
			for (int i = 0; i < n; i++) {
    
    
				count += (h[i]/max)*(w[i]/max);
			}
			if(count >= k) break;
			max--;
		}
		System.out.println(max);
		sc.close();
	}
}

Je suppose que tu aimes

Origine blog.csdn.net/L333333333/article/details/105148137
conseillé
Classement