Dieser Artikel wurde von Anfängern in der Programmierung geschrieben. Was ist los, du solltest das mehr tun! !! Wenn Sie irgendwelche Fragen haben, Bitte kommentieren.
Diese Frage ist auch eine Paiza-Übung. Bitte seien Sie versichert, dass es nichts mit dem Rang nach oben oder unten zu tun hat.
Jetzt kommen m Gruppen von Menschen der Reihe nach zu ihren Plätzen. Sei a_i die Anzahl der Personen in der i-ten Gruppe (1 ≤ i ≤ m). Sie versuchen, in einer Reihe von a_i-Sitzen hintereinander auf dem langen Tisch zu sitzen.
Da der Kunde jedoch ein Edo-Kind ist, wenn einer dieser Sitze bereits vom vorherigen Kunden besetzt ist, Die ganze Gruppe wird wütend und geht nach Hause, ohne sich zu setzen. Edo Kind ist schnell.
In der Eingabe wird die Position aufeinanderfolgender Sitze, an denen die i-te Gruppe sitzen wird, durch die Ganzzahl b_i angegeben. Die i-te Gruppe startet vom Sitz mit der Sitznummer b_i und versucht, von dort aus im Uhrzeigersinn auf a_i-Sitzen zu sitzen.
Erstellen Sie ein Programm, das die Anzahl der Personen ausgibt, die sicher am langen Tisch sitzen, nachdem sich die letzte Gruppe gesetzt hat.
Die Eingabe besteht aus m + 1 Zeilen. In der ersten Zeile werden n (Anzahl der Sitzplätze) und m (Anzahl der Gruppen) getrennt durch Leerzeichen halber Breite eingegeben. In der Zeile i + 1 (1 ≤ i ≤ m) werden zwei ganze Zahlen a_i (Anzahl der Personen in der Gruppe) und b_i (Anzahl der Sitzstartsitzplätze) getrennt durch ein Leerzeichen halber Breite eingegeben.
Ein Zeilenumbruch wird am Ende der letzten Zeile des Eingabewerts eingefügt. Die Zeichenfolge wird von der Standardeingabe übergeben.
Beispiel) 6 3 3 2 1 6 2 5
Nachdem sich die letzte Gruppe gesetzt hat, geben Sie bitte die Anzahl der Personen aus, die sicher in einer Zeile sitzen können.
Beispiel) 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) {
/*
*Ermitteln Sie die Gesamtzahl der Sitzplätze im Geschäft und die Anzahl der Gruppen, die das Geschäft als String-Typ besuchen, und speichern Sie sie in der Zeile
*Die in Zeile gespeicherten Daten werden durch Teilen geteilt und in lineArray des String-Arrays gespeichert.
*/
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] lineArray = line.split(" ");
/*
*Wandeln Sie die in lineArray gespeicherten Daten um und speichern Sie sie in jeder Variablen
*
* seatNum:Anzahl der Sitze
* totalGuest:Anzahl der Gruppen, die den Laden besuchen
*/
int seatNum = castString(lineArray[0]);
int totalGuest = castString(lineArray[1]);
/*
* seats:Erstellen Sie die Anzahl der Plätze mit hashMap
*Ganzzahl ist die Sitznummer
*Ob Boolean eine Person ist oder nicht(Wenn das stimmt, können Sie sich setzen,)
*/
Map<Integer,Boolean> seats = new HashMap<>();
for(int i = 1; i <= seatNum; i++){
seats.put(i,true);
}
/*
*isSitCustomer:Überprüfen Sie, ob sich auf dem vom Kunden ausgewählten Sitzplatz Personen befinden
*Wenn nicht, werfen Sie wahr
*
* choiceSeat:Sitznummer, die der Basispunkt für Kunden ist
*menberNum:Anzahl der Kunden, die gekommen sind
*/
int choiceSeat = 0;
int memberNum = 0;
for(int i = 0; i < totalGuest; i++){
//Erhält den Eingabewert der Konsole
//Zuweisen zu memberNum und choiceSeat
line = scanner.nextLine();
lineArray = line.split(" ");
memberNum = castString(lineArray[0]);
choiceSeat = castString(lineArray[1]);
//Wenn isSitGuest wahr ist, schreiben Sie die Sitzplatzinformationen des vom Kunden ausgewählten Sitzplatzes und die Anzahl der Personen auf falsch
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);
}
}
}
}
//Überprüfen Sie die falsche Anzahl von Sitzplatzinformationen und ersetzen Sie sie im Ergebnis
int result = 0;
for(int i = 1; i <= seats.size(); i++){
if(seats.get(i).equals(false)){
result++;
}
}
System.out.println(result);
}
//Wandeln Sie eine String-Typ-Nummer in einen Int-Typ um
public static int castString(String strNum){
int num = Integer.parseInt(strNum);
return num;
}
/*
*Karte Sitzplatzinformationen erhalten, von Kunden ausgewählte Sitzplätze, Anzahl der Kunden,
*Überprüfen Sie, ob die Anzahl der Kunden des vom Kunden ausgewählten Sitzplatzes falsch ist
*
*Bedingungen
*Gibt false zurück, wenn mehr Gäste als Sitzplätze vorhanden sind
*Gibt false zurück, wenn die Sitzinformationen nur einen false enthalten
*/
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:Geben Sie die allererste 1 der Sitzinformationen an
//Wird beim Zählen von 1 verwendet, wenn die Anzahl der Kunden die Sitzplatznummer überschreitet
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;
}
}
}
Zuerst habe ich grob ein Flussdiagramm geschrieben
Dies ist eine grobe Idee, aber Sie wissen, welche Art von Code Sie schreiben müssen.
Der schwierige Teil dieses Problems besteht darin, dass die Sitze kreisförmig sind. Es gibt 10 Sitzplätze und eine Gruppe von 4 Kunden möchte vom 8. Sitzplatz aus sitzen! !! Wenn das der Fall ist 8、9、10、1 Es ist notwendig, über die Sitznummer hinweg zu verarbeiten.
Nachdem Sie eine Stunde lang darüber nachgedacht haben, warum nicht einen Zähler getrennt von dem Zähler herstellen, für den ich mich entschieden habe? Deshalb habe ich diesen Teil ausprobiert
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);
}
}
Ich frage mich auch, ob es einen besseren Weg gibt.
Erstens ist die Verschachtelung des Teils, der in die Sitzinformationen falsch schreibt, zu tief. Ich kann nicht daran denken, aber ich denke, ich kann es präziser schreiben.
Auch der Teil, der den Sitz überspannt, ist viele Male der gleiche Vorgang Ich denke, es sollte eine Methode sein, aber Nachdem ich das Problem einmal gelöst habe, funktioniert mein Gehirn nicht ww
Das erste was ich dachte
Dies war mein erster Beitrag, aber diesmal ist es vorbei. Wenn es ein implizites Verständnis von Qiita gibt, ignoriere ich wahrscheinlich alle Waffen, aber Ich wäre dankbar, wenn jeder, der es liest, eine Aufzeichnung hinterlassen könnte.
Für diejenigen, die bis zum Ende lesen Vielen Dank.
In Bezug auf die Übungen kontaktierte mich Paiza, die ich posten kann.
Ich habe versucht, es mit Java zu lösen! !! Paiza-Übung "Long Table Unagiya" ~ Objektorientiert ~
Recommended Posts