Cet article est écrit par des débutants en programmation. Quel est le problème, vous devriez le faire plus! !! Si vous avez des questions, Commentez s'il vous plaît.
Cette question est aussi un exercice de paiza. Soyez assuré qu'il n'y a rien à voir avec l'augmentation ou la diminution du rang.
Maintenant, m groupes de personnes viennent à leur tour à leur place. Soit a_i le nombre de personnes dans le i-ème groupe (1 ≤ i ≤ m). Ils essaient de s'asseoir dans une série de a_i sièges d'affilée sur la longue table.
Cependant, comme le client est un enfant Edo, si l'un de ces sièges est déjà assis par le client précédent, Tout le groupe se met en colère et rentre chez lui sans s'asseoir. Le gamin Edo est rapide.
Dans l'entrée, la position des sièges consécutifs où le i-ème groupe va siéger est spécifiée par l'entier b_i. Le i-ème groupe part du siège avec le numéro de siège b_i et essaie de s'asseoir sur a_i sièges dans le sens des aiguilles d'une montre à partir de là.
Créez un programme qui indique le nombre de personnes qui sont assises en toute sécurité dans la longue table après que le dernier groupe est venu s'asseoir.
L'entrée se compose de m + 1 lignes. Sur la première ligne, n (nombre de sièges) et m (nombre de groupes) sont entrés séparés par des espaces demi-largeur. Dans la ligne i + 1 (1 ≤ i ≤ m), deux entiers a_i (nombre de personnes dans le groupe) et b_i (numéro de siège de départ) sont entrés séparés par un espace demi-largeur.
Un saut de ligne est inséré à la fin de la dernière ligne de la valeur d'entrée. La chaîne est transmise à partir de l'entrée standard.
Exemple) 6 3 3 2 1 6 2 5
Une fois que le dernier groupe s'est assis, veuillez indiquer le nombre de personnes qui peuvent être assises en toute sécurité sur une ligne.
Exemple) 4
1≦n≦100 1≦m≦100 1≦a_i≦n 1≦b_i≦n
package paiza;
import java.util.*;
public class unagiya {
public static void main(String[] args) {
/*
*Obtenez le nombre total de sièges dans le magasin et le nombre de groupes visitant le magasin sous forme de chaîne et enregistrez-le dans la ligne
*Les données stockées en ligne sont divisées par division et stockées dans lineArray du tableau String.
*/
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] lineArray = line.split(" ");
/*
*Cast les données stockées dans lineArray et les stocker dans chaque variable
*
* seatNum:nombre de places
* totalGuest:Nombre de groupes visitant le magasin
*/
int seatNum = castString(lineArray[0]);
int totalGuest = castString(lineArray[1]);
/*
* seats:Créer le nombre de sièges avec hashMap
*Integer est le numéro de siège
*Que Boolean soit une personne ou non(Si c'est vrai, vous pouvez vous asseoir,)
*/
Map<Integer,Boolean> seats = new HashMap<>();
for(int i = 1; i <= seatNum; i++){
seats.put(i,true);
}
/*
*isSitCustomer:Vérifiez s'il y a des personnes dans le siège choisi par le client
*Sinon, lancez vrai
*
* choiceSeat:Numéro de siège qui est le point de base que les clients doivent choisir
*menberNum:Nombre de clients venus
*/
int choiceSeat = 0;
int memberNum = 0;
for(int i = 0; i < totalGuest; i++){
//Reçoit la valeur d'entrée de la console
//Attribuer à memberNum et choiceSeat
line = scanner.nextLine();
lineArray = line.split(" ");
memberNum = castString(lineArray[0]);
choiceSeat = castString(lineArray[1]);
//Si isSitGuest est vrai, réécrivez les informations de siège du siège sélectionné par le client et le nombre de personnes sur false
if(isSitGuest(seats,choiceSeat,memberNum)){
for(int j = 0,index = 1 ; j < memberNum; j++){
if(seats.size() < choiceSeat + j){
seats.put(index, false);
index++;
} else {
seats.put(choiceSeat + j,false);
}
}
}
}
//Vérifiez le faux nombre d'informations sur le siège et remplacez-le dans le résultat
int result = 0;
for(int i = 1; i <= seats.size(); i++){
if(seats.get(i).equals(false)){
result++;
}
}
System.out.println(result);
}
//Convertir un nombre de type String en type int
public static int castString(String strNum){
int num = Integer.parseInt(strNum);
return num;
}
/*
*Plan Recevoir les informations sur les sièges, les sièges sélectionnés par les clients, le nombre de clients,
*Vérifier s'il y a faux pour le nombre de clients du siège sélectionné par le client
*
*conditions
*Renvoie false s'il y a plus d'invités que de sièges
*Renvoie false s'il y a même un faux dans les informations de siège
*/
public static boolean isSitGuest(Map seats, int choiceSeat, int menberNum){
if(menberNum > seats.size()){
return false;
}
boolean flag = true;
for(int i = 0,index = 1; i < menberNum; i++){
//index:Spécifiez le tout premier 1 des informations sur le siège
//Utilisé lors du comptage à partir de 1 lorsque le nombre de clients dépasse le numéro de siège
if(seats.size() < choiceSeat + i){
if(seats.get(index).equals(false)){
flag = false;
index++;
} else {
index++;
}
} else if(seats.get(choiceSeat + i).equals(false)){
flag = false;
}
}
if(flag){
return true;
} else {
return false;
}
}
}
D'abord, j'ai grossièrement écrit un organigramme
C'est une idée approximative, mais vous savez quel type de code écrire.
La partie difficile de ce problème est que les sièges sont circulaires. Il y a 10 sièges, et un groupe de 4 clients veut s'asseoir à partir de la 8e place! !! Si c'est le cas 8、9、10、1 Il est nécessaire de traiter le numéro de siège.
Après y avoir réfléchi pendant une heure, pourquoi ne pas faire un compteur séparément du compteur i for for? C'est pourquoi j'ai essayé cette partie
for(int j = 0,index = 1 ; j < memberNum; j++){
if(seats.size() < choiceSeat + j){
seats.put(index, false);
index++;
} else {
seats.put(choiceSeat + j,false);
}
}
Je me demande également s'il existe une meilleure façon.
Premièrement, l'imbrication de la partie qui écrit faux dans les informations de siège est trop profonde. Je ne peux pas y penser, mais je pense que je peux l'écrire de manière plus concise.
En outre, la partie qui chevauche le siège est le même processus plusieurs fois, donc Je pense que ça devrait être une méthode, mais Après avoir résolu le problème une fois, mon cerveau ne fonctionne pas ww
La première chose que j'ai pensé
C'était mon premier message, mais cette fois c'est fini. S'il y a une compréhension implicite de Qiita, j'ignore probablement toutes les armes, mais Je serais reconnaissant à quiconque le lirait de laisser un enregistrement.
A ceux qui lisent jusqu'au bout Merci beaucoup.
Concernant les exercices, paiza m'a contacté pour que je puisse poster.
J'ai essayé de le résoudre avec Java! !! Exercice Paiza "Long Table Unagiya" ~ Orienté objet ~
Recommended Posts