Die folgenden Fragen des Huawei -Programmierwettbewerbs werden online sortiert und die Codes werden alle selbst debugiert. Da Java online weniger Antworten gibt, können mich jeder gerne kritisieren und korrigieren. Ich hoffe auch, dass es für die Kinderschuhe, die sich darauf vorbereiten, Huawei auf dem Computer zu verwenden, ein wenig hilfreich sein wird. Während der Praxis erwachsen, komm schon! ~~
1. Zufällige Check (30 Punkte)
Problembeschreibung:
Aufgrund der großen Anzahl von Personen in einem bestimmten Unternehmen ist das Mittagessen in mehrere Mahlzeiten unterteilt, und für jede Charge ist die Mahlzeitenzeit streng erforderlich. Und überprüfen Sie die Esssituation regelmäßig. Bitte schreiben Sie ein Programm, um zufällige Überprüfungen zum Essen zu erhalten.
Erforderlich, um die Funktion zu implementieren:
void check_lunch (int num, int time, int input [], int output [])
【Eingabe】 int num, Gesamtzahl der Menschen essen
int Zeit, Anzahl der Mahlzeiten in Chargen
Char -Input [], Esssituation
【Ausgabe】 Char Output [], illegale Esssituation
【Zurück zurückgeben】 Keine
Hinweis: Für die Situation, in der das Essen in 3 Chargen unterteilt ist, sollte 12 Personen die richtige Esssituation wie folgt verteilt werden [1, 2, 3, 1, 2, 3, 1, 2, 3]. Wenn es diese Verteilung nicht erfüllt, ist es ein Verstoß und die entsprechende Position ist bei Ausgabe 0.
Beispiel
1) Eingabe: Num = 12, Zeit = 3, Eingabe = [1,2,3,3,1,3,1,1,1,1,2,3]
Ausgabe: Ausgabe = [1,2,3,0,0,3,1,0,0,1,2,3]
2) Eingabe: Num = 11, Zeit = 4, Intput = [1,2,3,4,2,3,3,4,1,2,3]
Ausgabe: Ausgabe = [1,2,3,4,0,0,3,4,1,2,3]
Paket com.sheepmu.text; Import Java.util.Arrays; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {int num = 11, time = 4; int [] input = {1,2,3,4,2,3,3,4,1,2,3}; // int [] output = new int [] {}; int [] output = new int [num]; HwCompetition hwc = new hwCompetition (); hwc.check_lunch (num, Zeit, Eingabe, Ausgabe); } void check_lunch (int num, int time, int input [], int output []) {System.out.println (arrays.toString (input)); int j = 0; für (int i = 0; i <num; i ++) {int yushu = (i+1)%Zeit; if (yushu! = 0) {if (input [i] == yushu) {output [j] = yushu; } sonst Ausgabe [j] = 0; J ++; } else {// Der Fall von Rest == 0 if (input [i] == Zeit) {output [j] = Zeit; } sonst Ausgabe [j] = 0; J ++; }} System.out.println (arrays.toString (output)); }}2. Geben Sie Lenovo ein (30 Punkte)
Problembeschreibung:
Die Eingabe der Assoziationsfunktion ist eine sehr praktische Funktion. Bitte programmieren Sie und implementieren Sie ähnliche Funktionen.
Erforderlich, um die Funktion zu implementieren:
void auto_complete (char *str, char *tmp, char *output)
【Eingabe】 char *str, Kandidatenzeichenfolge
char *tmp, Eingabezeichenfolge
【Ausgabe】 int *output, eine String -Matching für die Assoziation
【Zurück zurückgeben】 Keine
Hinweis: Die Kandidatenketten werden durch Leerzeichen getrennt und die Eingangszeichenfolge stimmt erst vom Beginn der Zeichenfolge überein. Ausgabe der passenden Substrings, die ebenfalls durch Leerzeichen getrennt sind. Wenn es kein Substring gibt, das erfolgreich übereinstimmt, wird eine leere Zeichenfolge ausgegeben.
Beispiel
1) Eingabe: str = chengdu chongqing, tmp = c
Ausgabe: Ausgabe = Chengdu Chongqing
2) Eingabe: Str = Chengdu Chongqing, TMP = Che
Ausgabe: Ende = Chengdu
3) Eingabe: Str = Beijing Nanjing, TMP = Jing
Ausgabe: Ende =
Methode 1:
Paket com.sheepmu.text; Import Java.util.ArrayList; importieren java.util.list; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {String str = "Chengdu Chongqing"; String tmp = "Che"; String output = ""; HwCompetition hwc = new hwCompetition (); hwc.auto_complete (str, tmp, output); } void auto_complete (String str, String tmp, String -Ausgabe) {String [] strs = str.split ("// s"); Liste <String> list = new ArrayList <string> (); für (int i = 0; i <strsgth; i ++) list.add (strs [i]); System.out.println ("Liste --->"+Liste); System.out.println ("tmp --->"+tmp); char [] tmps = tmp.toarArray (); int len_list = list.size (); int len_t = tmps.length; für (int j = 0; j <len_list; j ++) {int len_list_j = list.get (j) .Length (); char [] list_j = list.get (j) .toCharArray (); für (int k = 0; k <len_t; k ++) {if (len_t> len_list_j) {list.remove (j); len_list-; // !!!!!!!!!!!!!! J--;//!!!!!!!!!!!!!!!!!!!!!!!! J--;//!!!!!!!!!!!!!!!!!!!!!!!!!!! Wenn dies nicht der Fall ist, wird es ein Problem geben, da nach dem Entfernen der Größe 1, aber j, dh der Index wird zu 1 Bruch; } else {// Die Länge der Temperatur ist kleiner als die Länge des Kabels if (tmps [k]! = list_j [k]) {list.remove (j); len_list-; // !!!!!!!!!!!!!! J--;//!!!!!!!!! brechen; }}}} // output = list.toString (); // Dies wird [chengdu], das [] if (! list.Empty ()) auf beiden Seiten {StringBuffer sb = new StringBuffer () hat; sb.Append ("end ="); Für (String -Ergebnis: Liste) {SB.Append (Ergebnis+""); // Räume hinzufügen! ! Schließlich entfernen Sie das "" "des Schwanzes; } output = sb.toString (). trim (); // !! } else {output = "end ="; } System.out.println (output); }}Methode 2:
Paket com.sheepmu.text; Import Java.util.ArrayList; importieren java.util.list; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {String str = "Chengdu Chongqing"; String tmp = "Che"; String output = ""; HwCompetition hwc = new hwCompetition (); hwc.auto_complete (str, tmp, output); } void auto_complete (String str, String tmp, String -Ausgabe) {String [] strs = str.split ("// s"); // wie unten sollte es nur mit/s,/d usw. usw. List <string> list = new ArrayList <string> () hinzugefügt werden; für (int i = 0; i <strsgth; i ++) list.add (strs [i]); System.out.println ("Liste --->"+Liste); System.out.println ("tmp --->"+tmp); int len_list = list.size (); für (int j = 0; j <len_list; j ++) {// Es gibt eine weitere gute Methode :! list.get (j) .startswith (tmp); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (! list.get (j) .Matches (tmp+"[Az]*")) {// Der reguläre Ausdruck ist cool !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! list.remove (j); len_list--; J--; }} if (! list.isempty ()) {stringBuffer sb = new StringBuffer (); sb.Append ("end ="); Für (String -Ergebnis: Liste) {SB.Append (Ergebnis+""); // Räume hinzufügen! ! Schließlich entfernen Sie das "" "des Schwanzes; } output = sb.toString (). trim (); // !! } else {output = "end ="; } System.out.println (output); }} 3. Probleme der Farmzählungen (20 Punkte)
Problembeschreibung:
Es ist bekannt, dass es in einer bestimmten Farm eine Gruppe von Hühnern und Kaninchen mit insgesamt M -Köpfen und n Fuß gibt. Berechnen Sie, wie viele Hühner und Kaninchen insgesamt sind.
Erforderlich, um die Funktion zu implementieren:
public String getfowlsnum (int iheadnum, int ifootnum, ArrayList Ichickennum, ArrayList Irabbitnum)
【Eingabe】 iadnum: Die Gesamtzahl der Header
Ifootnum: Anzahl der Gesamtfuß [Ausgabe] Ichickennum: Anzahl der Hühner
Irabbitnum: Anzahl der Kaninchen [Rückgabe] "0": Anzahl der Hühner und Kaninchen, die den Anforderungen entsprechen
"-1": Es wurden keine Menge an die Anforderungen festgestellt
Beispiel
Eingabe: Iheadnum = 201, Ifootnum = 604
Ausgabe: iChickennum.Add (100), irabbitnum.add (101) Return: "0"
Eingabe: Iheadnum = 201, Ifootnum = 123
Ausgabe: iChickennum.add (0), irabbitnum.add (0) return: "-1"
Paket com.sheepmu.text; Import Java.util.ArrayList; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {int iheadnum = 201; int ifootnum = 604; ArrayList iChickennum = new ArrayList (); ArrayList irabbitnum = new ArrayList (); HwCompetition hwc = new hwCompetition (); hwc.getfowlsnum (iheadnum, ifootnum, Ichickennum, Irabbitnum); } public String getfowlsnum (int iheadnum, int ifootnum, ArrayList iChoickennum, ArrayList Irabbitnum) {if (ifootnum%2! = 0) {// !!! System.out.println ("iChickennum.add (0), irabbitnum.add (0)"); return "-1"; // Wenn die Anzahl der Fuß ungerade ist, ist es offensichtlich falsch,} else {int ji = 2*iheadnum-ifootnum/2; int tui = ifootnum/2-iadnum; if (ji> = 0 && tui> = 0) system.out.println ("iChickennum.add ("+ji+"), irabbitnum.add ("+tui+")"); zurück "0"; }}} 4. Stringkomprimierung (30 Punkte)
Problembeschreibung:
Komprimieren Sie die angegebene Zeichenfolge gemäß den Spezifikationen und geben Sie den komprimierten Zeichenfolge aus. Komprimierungsspezifikationen sind: Wenn die gleichen Zeichen kontinuierlich sind, dann komprimieren Sie sie auf "Zeichen + Nummer", wie "aaaa", die zu "A4" komprimiert ist, komprimiert.
Hinweis: 1. Ein einzelnes Zeichen wird kontinuierlich komprimiert, wenn Bababa nicht komprimiert werden kann.
2. Die zu komprimierte Zeichenfolge enthält keine Zahlen und Fluchtzeichen.
Erforderliche Implementierungsmethode:
public String compressstr (String srcstr) [Eingabe] SRCSTR: Die zu komprimierte Zeichenfolge [Ausgabe] Keine [Rückgabe] Beispieleingabe der komprimierten Zeichenfolge: srcstr = "aaacccddef" return: "a3c3d2ef"
Methode 1: (Verwenden Sie ArrayList) Siehe Huawei Computer -Zusammenfassung Frage 8
Methode 2: (Wenn Sie String verwenden, sollten diejenigen, die nicht so lesbar wie oben lesbar sind, mit der API vertraut sein)
Paket com.sheepmu.text; Import Java.util.ArrayList; importieren java.util.list; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {String str = "abcddef"; HwCompetition hwc = new hwCompetition (); String result = hwc.compressstr (str); System.out.println (Ergebnis); } public String compressstr (string str) {stringBuffer sb = new StringBuffer (); für (int i = 0; i <str.length (); i ++) {if (str.length () == 0) break; if (Str.Length () == 1) sb.Append (str.charat (i)); // für aaacccddef für (int j = i+1; j <str.length (); j ++) {if (str.charat (i) == str.charat (j)) {if (j == länge ()-1) {// // // für aaaccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd. sb.append (str.length ()). append (str.charat (i)); str = str.substring (j); // Die Länge ist nur 0 links. Muss einem neuen STR zuweisen !!!!!!!!!!!!!!!!!!!!!!!!! brechen; }} else {// if (j == 1) sb.append (str.charat (i)); sonst sb.append (j) .Append (str.charat (i)); System.out.println (sb.toString ()); str = str.substring (j); ich--; brechen; }}} return sb.toString (); }} 5. Algorithmus sortieren (20 Punkte)
Problembeschreibung:
Das angegebene nicht ordnete Ganzzahlarray ist in absteigender Reihenfolge sortiert und das nicht ordnungsgemäße Anordnungsarray ist n und der Typ ist unsigniert int int
Erforderlich, um Funktionen zu implementieren
void DSCSORT (const InputArray [], unsigned int n, int outputArray [])
【Eingabe】 InputArray: Das gegebene ungeordnete Array
N: Arraylänge [Ausgabe] Ausgabearray: Sortieren Sie Array [Rückgabe] kein Beispieleingang: InputArray = {1,5,4,8,3,2,9,6,7,0}
Ausgabe: outputArray = {9,8,7,6,5,4,3,2,1,0}
Methode 1: (Rufen Sie die API direkt auf) Idee: Aufsteiger Reihenfolge und Ausgabe umgekehrt
Paket com.sheepmu.text; Import Java.util.Arrays; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {int [] inputArray = {1,5,4,8,3,2,9,6,7,0}; int n = inputArray.length; int [] outputArray = new int [n]; HwCompetition hwc = new hwCompetition (); hwc.dscsort (InputArray, N, OutputArray); } void dscsort (int inputArray [], int n, int outputArray []) {arrays.sort (inputArray); // Ascending int i = 0; while (-n> = 0) {outputArray [i ++] = inputArray [n]; } System.out.println (arrays.toString (outputArray)); }}Methode 2: (Wenn die Frage feststellt, dass die API nicht aufgerufen werden kann)
Paket com.sheepmu.text; Import Java.util.Arrays; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {int [] inputArray = {1,5,4,8,3,2,9,6,7,0}; int n = inputArray.length; int [] outputArray = new int [n]; HwCompetition hwc = new hwCompetition (); hwc.dscsort (InputArray, N, OutputArray); System.out.println (Arrays.toString (InputArray)); } void DSCSORT (int InputArray [], int n, int outputArray []) {// Schreiben Sie sich selbst: schneller Bestellung absteigend int hoch = 0; int niedrig = n-1; sortieren (InputArray, hoch, niedrig); } void sort (int inputArray [], int hoch, int niedrig) {int i, j, temp; i = hoch; // High-End-Index J = LOW; // Low-End-Index Temp = InputArray [i]; // Bitte das erste Element als Standardelement. while (i <j) {// Der rekursive Ausgang ist niedrig> = hoch während (i <j && temp> inputArray [j]) // Das Backend ist kleiner als Temp und entspricht der absteigenden Reihenfolge. Unabhängig davon wird das niedrige Index vorwärts bewegt. i ++; } while (i <j && temp <inputArray [i]) i ++; if (i <j) {inputArray [j] = inputArray [i]; J--; }} // Während danach, das erste Festplattensortier -InputArray [i] = temp; // Legen Sie den Temperaturwert in seine Position. if (hoch <i) // Beachten Sie, dass die Sortierung des Einweiswerts (InputArray, hoch, i-1); // rekursiv für das linke Anschlussarray if (i <niedrig) // Beachten Sie, dass die Sortierung des Einweiswerts (InputArray, I+1, niedrig); // rekursiv für das rechte Anschlussarray; Wenn ich das obige Beispiel vergleicht, sind i und j die gleichen wie der folgende Code !!!!!!!!!!!!!! }}6. Finden Sie die größte Nicht-Repetitionsnummer (30 Punkte)
Problembeschreibung
Wenn es in demselben Dezimalausdruck keine zweistelligen zweistelligen Dezimalausdruck gibt, wird es als "keine Wiederholungsnummer" bezeichnet. Zum Beispiel sind 105, 1234 und 12121 alle "keine Wiederholungsnummern", während 11, 100 und 1225 nicht. Angesicht
Erforderlich, um Funktionen zu implementieren
int getNoTrepeatnum (int Iivalue)
【Eingabe】 LVALUE: Die angegebene Zahl gibt die minimale Nicht-Wiederholungszahl größer als der Wert [Ausgabe] Keine [Rückgabe] Die minimale Nicht-Repeat-Zahl größer als die INALUE-Beispieleingabe: Ivalue = 54
Rückkehr: 56
Eingabe: Ivalue = 10
Rückkehr: 12
Eingabe: Ivalue = 98
Rückkehr: 101
Eingabe: Ivalue = 21099
Rückkehr: 21201
Paket com.sheepmu.text; Import Java.util.Arrays; import Java.util.scanner; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {scanner input = new scanner (System.in); int a = input.nextint (); System.out.println ("Die Eingangsnummer ist ---->"+a); HwCompetition hwc = new hwCompetition (); int result = hwc.getnotrepeatnum (a); System.out.println ("Gibt die minimale Nicht-Wiederholungszahl größer als"+a+"---->"+Ergebnis zurück); } int getNoTrepeatnum (int iValue) {int i = 0; für (i = ivalue+1; i <100000; i ++) {if (! isrepeatnum (i)) {break; // !!! Andernfalls läuft es umsonst umsonst}} return i; } public boolean isrepeatnum (int a) {string str = a+""; char [] cs = str. tocharArray (); int len = cs.Length; Für (int i = 0; i <len-1; i ++) {// weil i+1 später benötigt wird, wenn es i <len ist, müssen Sie einweisen, um die Grenzen zu überschreiten. if (cs [i] == cs [i+1]) return true; } return false; }} 7. Kartenvergleich spielen (30 Punkte)
Problembeschreibung:
Im Poker umfassen die Kartenarten: A (1), 2, 3, 4, 5, 6, 7, 8, 9, T (10), J (11), Q (12), K (13), D (Devilkin), B (Belial).
Bitte machen Sie ein einfaches Programm, geben Sie die Charaktere von zwei Karten ein, wie "2" und "K" und beurteilen Sie die Größe der Karte. Die Regeln sind wie folgt:
B> d> 2> a> k> q> j> 10 ....> 3 Das kleinste ist 3
Urteilsregeln: Vergleiche CFIRSTCARD und CSECONDCARD. Wenn FirstCar groß ist, kehren Sie 1 zurück; Wenn dasselbe, geben Sie 0 zurück; Wenn FirstCar klein ist, geben Sie -1 zurück.
Erforderlich, um die Funktion zu implementieren:
int compareOnecard (char cfirstcard, char csecondcard)
【Eingabe】 char cfirstcard: Die erste Karte, die verglichen werden muss
Char CsecondCard: Die zweite Karte, die verglichen werden muss
[Return] INT -Typ: Geben Sie das Vergleichsergebnis von zwei Karten zurück. Hinweis: Die Rechtmäßigkeit der Eingabe ist nicht erforderlich, und dies wird vom Benutzer der Funktion garantiert. Die eingegebenen Karten sind alle Charaktere '1', '2' ... '9', Capital 'a', 'T', 'J', 'Q', 'K', 'D', 'B'.
Zum Beispiel:
Geben Sie: '4', '5', zurück: -1
Geben Sie: '6', '6', zurück: 0 zurück: 0
Paket com.sheepmu.text; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {char cfirstcard = '5'; char csecondcard = '6'; HwCompetition hwc = new hwCompetition (); int result = hwc.comPareOnecard (CFIRSTCARD, CSECONDCARD); System.out.println ("Ergebnis des Vergleichs"+Ergebnis); } int compareOnecard (char cfirstcard, char csecondcard) {int if = getRealln (cfirstcard); System.out.println ("if --->"+ if); int is = getRealln (cSecondCard); System.out.println ("ist --->"+ ist); Rückgabe, wenn> ist? 1: Wenn <ist? -1: 0; // keine Klammern hinzufügen} int getRealln (char c) {int value = 0; Switch (c) {case 't': value = 10; brechen; Fall 'J': value = 11; brechen; Fall 'Q': value = 12; brechen; Fall 'K': Wert = 13; brechen; Fall 'a': value = 14; brechen; Fall '2': Wert = 15; brechen; Fall 'D': Wert = 16; brechen; Fall 'B': Wert = 17; brechen; Fall '3': Fall '4': case '5': case '6': case '7': case '8': case '9': // value = c; // Super dummer Fehler !!! Wenn Sie 9, '9' = 57 eingeben !!! Der Wert von Charakter 9 ist nicht die Zahl 9, sondern der Wert des Charakters selbst. value = Integer.ParseInt (c+""); brechen; } Rückgabewert; }} 8. Glimps (30 Punkte)
Problembeschreibung:
In Chengdu heißt ein beliebtes Pokerspiel "Dry Starring". Spielkarten werden verwendet, darunter: A (1), 2, 3, 4, 5, 6, 7, 8, 9, T (10), J (11), Q (12), K (13).
Hinweis: 10 wird durch T ersetzt, und die großen Geister und kleinen Geister werden hier vorerst nicht berücksichtigt.
Die Größenregeln für Zweihandkarten sind wie folgt:
A) Single Card: 4 bis 3, 5 bis 4, und erst dann, wenn die beiden Karten etwas größer sind, können Sie vergleichen. Die Reihenfolge des Vergleichs lautet: a> k> q> j> t> 9> 8> 7> 6> 5> 4> 3.
Zum Beispiel: 6 ist größer als 5, kann aber nicht größer als 4 sein, und 6 und 4 können nicht verglichen werden. Single Card 2 ist eine spezielle Karte, die mit allen anderen normalen Einzelkarten verglichen werden kann und die größte ist.
Bitte beachten Sie, dass 3, es kann nicht größer sein als jede Karte.
B) Paar: Das heißt, die Punkte der beiden Karten sind gleich, die Regeln ähneln denen einer einzigen Karte, und es ist auch eine ähnliche Verarbeitung erforderlich. Zwei 2 sind spezielle Paare und können größer sein als alle anderen Paare.
Hinweis: Sie können die Sub- und Einzelkarten nicht vergleichen.
c) Bombe: 3 Karten mit der gleichen Anzahl von Punkten. Eine Bombe kann größer sein als jede einzelne Karte und jedes Paar. Der Vergleich zwischen Bomben muss nicht wie eine einzige Karte und ein Paar sein. Es kann nur größer zu vergleichen sein.
Solange die Regeln erfüllt sind: 222> AAA> KKK> QQ> JJJ> TT>…> 333. Das heißt, 222 ist das größte, AAA kann größer sein als KKK oder 333.
d) Andere Regeln werden für die Umsetzung nicht berücksichtigt. Implementieren Sie nun ein Programm, um die Größe der Karten in beiden Händen automatisch zu bestimmen. Hinweis: Die eingegebenen Karten werden nur in drei Typen angezeigt: Single, Paar und Bombe. Die maximale Anzahl von Bildern beträgt 3.
Es wird keine 2 Einzelkarten geben. Zum Beispiel gibt es "25" kein Paar plus eine einzige Karte wie "334" usw. Sie müssen keine ähnlichen Eingabeausnahmen in Betracht ziehen.
Pfirstcards ist jedoch eine einzige Karte und PSECONDCARDS ist ein Paar, und ähnliche Kombinationseingaben sind legal.
Erforderlich, um die Funktion zu implementieren:
int ComparyCards (char *Pfirstcards, char *psecondcards)
【Eingabe】 char *Pfirstcards: Aus erster Handkarten, die verglichen werden müssen
char *psecondcards: Die gebrauchte Hand, die verglichen werden muss [Rückgabe] int -Typ, Rückgabewertbeschreibung:
Wenn Pfirstcards und PSECondcards nicht verglichen werden können, wie "3" und "6"; "55" und "6" usw., kehren Sie 0 zurück.
Wenn Pfirstcards größer sind als PSECondcards, return 1.
Wenn Pfirstcards gleich PSECONDCARDS ist, return 2.
Wenn Pfirstcards weniger als PSECONDCARDS sind, kehren Sie 3 zurück.
Hinweis: Die Rechtmäßigkeit der Eingabe ist nicht erforderlich, dies wird vom Benutzer der Funktion garantiert. Die eingegebenen Karten sind alle Charaktere '1', '2' .. '9', Capital 'a', 'T', 'J', 'Q', 'K'.
Beispieleingabe: "77", "33", return: 0
Geben Sie: "77", "77", zurück: 2
Ideen: 1. 1VS2 oder 2VS1 In diesem Fall müssen Sie nur die Länge beurteilen, um das Ergebnis zu erhalten. Es ist kein nachfolgender Vergleich erforderlich
2. 1VS1 oder 2 VS2 genauso zu vergleichen
3. Vergleichsmethoden von 3VS3 und Fall 2
4. 3 gegen Nicht-3 oder Nicht-3-VS3
Paket com.sheepmu.text; Import Java.util.Arrays; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {String pfirstcards = "qq"; String pSecondcards = "444"; HwCompetition hwc = new hwCompetition (); int result = hwc.comParCards (Pfirstcards, PSECondcards); System.out.println ("Ergebnis des Vergleichs"+Ergebnis); } int CompueCards (String -Pfirstcards, String psecondcards) {int len1 = pfirstcards.length (); int len2 = pSecondcards.length (); if ((len1 == 1 && len2 == 2) || (len1 == 2 && len2 == 1)) // 1VS2, kann nicht verglichen werden. Um Effizienz zu gewährleisten, werden diejenigen, die zuerst durchgeführt werden können, erfolgen, sodass die folgende Situation nicht ausführen muss. Rückkehr 0; int [] is1 = getReallns (Pfirstcards); int [] is2 = getReallns (PSECONDCARDS); // System.out.println(Arrays.toString(is1));//[12, 12] // System.out.println(Arrays.toString(is2));//[4, 4, 4] if((len1==1&&len2==1)||(len1==2&&len2==2)){//1vs1 or 2vs2, the comparison Die Methode ist gleich. Tatsächlich sind keine Klammern erforderlich, wenn (math.abs (is1 [0] -is2 [0]) == 1) // Ich weiß, dass Länge 2 definitiv ein Paar von Fällen ist, die IS1 [0] -is2 [0]> 0 zurückgeben? 1: 3; sonst wenn (is1 [0] == is2 [0]) return 2; sonst return 0; } if (len1 == 3 && len2 == 3) // Die Bombe kann nicht gleich sein, da es in einem Deck keine 6 identischen Karten gibt. Return IS1 [0]> IS1 [0]? 1: 3; if (len1 == 3 && len2 <3 || len1 <3 && len2 == 3) return len1 == 3? 1: 3; Rückgabe 0; // In der Tat sollten die Testfälle diesen Satz niemals ausführen. } int [] getReallns (String s) {int len = sength (); int [] cs = new int [len]; für (int i = 0; i <len; i ++) {cs [i] = getRealln (S. charat (i)); } return cs; } int getRealln (char c) {int value = 0; Switch (c) {case 't': value = 10; brechen; Fall 'J': value = 11; brechen; Fall 'Q': value = 12; brechen; Fall 'K': Wert = 13; brechen; Fall 'a': value = 14; brechen; Fall '2': Wert = 15; brechen; Fall '3': Fall '4': case '5': case '6': case '7': case '8': case '9': // value = c; // Super dummer Fehler !!! Wenn Sie 9, '9' = 57 eingeben !!! Der Wert von Charakter 9 ist nicht die Zahl 9, sondern der Wert des Charakters selbst. value = Integer.ParseInt (c+""); brechen; } Rückgabewert; }} 9. Matrixtranspon (20 Punkte)
Problembeschreibung:
Tauschen Sie die Zeilen einer N*n Matrix aus. ・
Erforderlich, um die Funktion zu implementieren:
öffentliche String -MatrixTranspsis (String Inarr, int n)
【Eingabe】 Inarr: Eingabezeichenmatrix
N: Anzahl der Zeilen der N*N -Matrix [Rückgabe] transponierte Zeichenmatrix Hinweis:
Die Eingangs- und Ausgangsmatrix sind zweidimensionale Arrays, die in eindimensionaler Form gespeichert sind. Zum Beispiel ist der Eingang "1,2,3,4,5,6,7,8,9", was tatsächlich die folgende 3*3 -Matrix darstellt:
1,2,3,4,5,6,7,8,9
Beispieleingabe inarr = "1,2,3,4,5,6,7,8,9", n = 3 Renditen: "1,4,7,2,5,8,3,6,9"
Hinweis: Der Autor hat den Titel künstlich zu einer Zeichenfolge als einem Zeichen hinzugefügt. Charaktere sind einfacher. Achten Sie auf die Abfangen von Saiten. 13 ist nicht 1,3
Methode 1: Matrix wurde in der Frage verwendet. Betrachten Sie es einfach als mit dem zweidimensionalen Array vertraut
Paket com.sheepmu.text; Import Java.util.Arrays; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {String inarr = "1,2,3,4,5,6,7,9,10,11,12,13,14,15,16"; int n = 4; System.out.println ("Inarr --->"+Inarr); HwCompetition hw = new hwCompetition (); String result = hw.matrixTranspsis (Inarr, n); System.out.println ("Ergebnis ---->"+Ergebnis); } public String matrixTranspsis (String inarr, int n) {// Entfernen Sie das Komma in der Zeichenfolge, andernfalls ist das Komma ein Abschlusswert der String. Fügen Sie beim Ausgang die String [] ss = inarr.split (",", ") hinzu; String [] [] CSS = new String [n] [n]; int k = 0; für (int i = 0; i <n; i ++) {// Die Zeichenfolge in ein zweidimensionales Array für (int j = 0; j <n; j ++) {CSS [i] [j] = ss [k] konvertieren; K ++; }} StringBuffer sb = new StringBuffer (); für (int i = 0; i <n; i ++) {// 2d Array inverse für (int j = 0; j <n; j ++) {sb.append (css [j] [i]+","); // Es gibt noch einen Schwanz,}} return sb.substring (0, sb.length ()-1); }} Methode 2: Einfacher, überhaupt keine Matrix erforderlich.
Paket com.sheepmu.text; Import Java.util.Arrays; / * * @Author Sheepmu */ public class hwCompetition {public static void main (String [] args) {String inarr = "1,2,3,4,5,6,7,9,10,11,12,13,14,15,16"; int n = 4; System.out.println ("Inarr --->"+Inarr); HwCompetition hw = new hwCompetition (); String result = hw.matrixTranspsis (Inarr, n); System.out.println ("Ergebnis ---->"+Ergebnis); } public String matrixTranspsis (String inarr, int n) {// Entfernen Sie das Komma in der Zeichenfolge, andernfalls ist das Komma auch ein Index -Wert der String. Fügen Sie beim Ausgabe eine String [] ss = inarr.split (",") hinzu; StringBuffer sb = new StringBuffer (); für (int i = 0; i <n; i ++) {// für das Frage Beispiel: Die erforderliche Eintragsreihenfolge ist 036147258 für (int j = i; j <ss.Length; j+= n) {sb.append (ss [j]+"); // Es gibt ein Komma-1). Komma}} 10. Straßenlaternen (20 Punkte)
Straßen in einer provinziellen Hauptstadt sind gekreuzt. Um den Betrieb von Straßenlaternen zu überwachen, verwendet jede Straße eine numerische Schnur, um den Betrieb aller Straßenlaternen auf der Straße zu identifizieren.
Angenommen, das Straßenlicht enthält nur die folgenden drei Zustände (identifiziert durch die Zahlen 0, 1, 2, und ein Straßenlicht entspricht nur einem der Staaten):
0 Das Schild Street Light ist aus;
1 Das Straßenlicht ist eingeschaltet;
2 Street Light -Versagen identifizieren;
Die maximale Anzahl aufeinanderfolgender Straßenlaternen im selben Zustand auf der Straße auf der Straße basierend auf der eingegebenen Saite. Wenn die Anzahl der Straßenlaternen in beiden Bundesstaaten gleich ist, wird der erste Street Light State zurückgegeben.
Geben Sie eine staatliche Saite ein, die aus ununterbrochenen Straßenlaternen auf der Straße besteht. Die Saite enthält nur Zahlen, und der Zustand jeder Straßenbeleuchtung ist eines von 0, 1 und 2. "1101" repräsentiert 4 Straßenlaternen, das dritte Straßenlicht befindet sich im Zustand des Zustands und die anderen 3 befinden sich im Zustand.
Die maximale Anzahl von Straßenlaternen, die kontinuierlich im selben Zustand liegen, wird ausgegeben.
Der Status der oben genannten Straßenlaternen;
Anforderungen: Ausgabe zuerst die Menge aus, dann den Status ausgeben und ein Speicherintervall zwischen den beiden Ganzzahlen verwenden. Zum Beispiel Ausgabe:
53 2
Probeneingang
112200111
Probenausgabe
3 1
Paket com.sheepmu.text; Import Java.util.Arrays; / * * @author Sheepmu */öffentliche Klasse hwCompetition {public static void main (String [] args) {String S = "112001110"; // Diese Art von Frage muss am Ende auf alle gleichen Situationen achten, dh keine Unterschiede davon gibt es wieder, es ist wieder einfach, einen toten Zyklus zu haben. System.out.println ("Inarr --->"+s); HwCompetition hw = new hwCompetition (); String -Ergebnis = hw.ludeng (s); System.out.println ("Frageergebnis ---->"+Ergebnis); } public String ludeneng (String s) {// Entfernen Sie das Komma in der Zeichenfolge, andernfalls ist das Komma auch ein SubScript -Wert der String. Fügen Sie es bei Ausgabe zu char [] AS = s.therarArray () hinzu; int len = as.length; int maxc = 1; // int muBiaObIndex = 0; // Erstellen Sie keine zusätzlichen Variablen // int MUBIAVOVEL = AS [0]; Int BindEx = 0; // Wenn Sie den größten ersten Index von Folge zurückgeben müssen, dann 6 zu diesem Zeitpunkt; Wenn die Frage diese Anforderung hat: Legen Sie zwei Variablen fest: die Anzahl der Male "pro Teil" + das erste eingestellte Einweis, das erscheint. char value = as [0]; // Wenn die Frage den Wert des maximalen Längenteils zurücksenden muss, dh 1 des Zustands dieser Frage für (int i = 0; i <len-1;) {int count = 1; // Jede äußere Schleife soll die Anzahl auf 1 festlegen und eine neue Anzahl von BindEx = i starten; Wert = als [i]; für (int j = i+1; j <len; j ++) {if (as [i]! = as [j]) {i = j; brechen; } else {i ++; // !!!!!!!!!!! Wenn danach kein anderes erscheint; Wenn dieser Satz nicht hinzugefügt wird, wird die äußere Schleife ständig ausgeführt. zählen ++; }} if (count> maxc) {maxc = count; // mubiaobindex = BindEx; // mubiaovalue = Wert; System.out.println ("maxc --->"+maxc+"start-subScript ---->"+BindEx+"Status ---->"+Wert); }} StringBuffer sb = new StringBuffer (); return sb.append (maxc+"") .Append (Wert) .ToString (); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.