Pertanyaan kompetisi pemrograman Huawei berikut diurutkan secara online, dan semua kodenya sendirian. Karena ada lebih sedikit jawaban untuk Java Online, semua orang dipersilakan untuk mengkritik dan mengoreksi saya. Saya juga berharap ini akan sedikit membantu sepatu anak -anak yang sedang bersiap untuk menggunakan Huawei di komputer. Tumbuh selama latihan, ayolah! ~~
1. Pemeriksaan acak makan (30 poin)
Deskripsi Masalah:
Karena sejumlah besar orang di perusahaan tertentu, makan siang dibagi menjadi beberapa batch makanan, dan waktu makan sangat diperlukan untuk setiap batch. Dan periksa situasi makan secara teratur. Harap tulis program untuk mencapai pemeriksaan acak tentang makan.
Diperlukan untuk mengimplementasikan fungsi:
void check_lunch (int num, int time, int input [], int output [])
【Input】 int num, jumlah total orang makan
waktu int, jumlah makanan dalam batch
input char [], situasi makan
【Output】 output char [], situasi makan ilegal
【Kembali】 Tidak ada
Catatan: Untuk situasi di mana makan dibagi menjadi 3 batch, 12 orang makan, situasi makan yang benar harus didistribusikan sebagai berikut [1, 2, 3, 1, 2, 3, 1, 2, 3]. Jika tidak memenuhi distribusi ini, itu adalah pelanggaran, dan posisi yang sesuai adalah 0 saat output.
Contoh
1) Input: num = 12, waktu = 3, input = [1,2,3,3,1,3,1,1,1,1,2,3]
Output: output = [1,2,3,0,0,3,1,0,0,1,2,3]
2) Input: num = 11, waktu = 4, intput = [1,2,3,4,2,3,3,4,1,2,3]
Output: output = [1,2,3,4,0,0,3,4,1,2,3]
paket com.sheepmu.text; impor java.util.arrays; / * * @author domba */ kelas publik 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 = int int [] {}; int [] output = int int [num] baru; Hwcompetition hwc = hwcompetition baru (); hwc.check_lunch (num, waktu, input, output); } void check_lunch (int num, int time, int input [], int output []) {System.out.println (arrays.tostring (input)); int j = 0; untuk (int i = 0; i <num; i ++) {int yushu = (i+1)%waktu; if (yushu! = 0) {if (input [i] == yushu) {output [j] = yushu; } output lain [j] = 0; j ++; } else {// kasus sisa == 0 if (input [i] == waktu) {output [j] = waktu; } output lain [j] = 0; j ++; }} System.out.println (arrays.toString (output)); }}2. Masukkan Lenovo (30 poin)
Deskripsi Masalah:
Input fungsi asosiasi adalah fungsi yang sangat praktis, silakan program dan terapkan fungsi serupa.
Diperlukan untuk mengimplementasikan fungsi:
void auto_complete (char *str, char *tmp, char *output)
【Input】 char *str, string kandidat
char *tmp, string input
【Output】 output int *, pencocokan string untuk asosiasi
【Kembali】 Tidak ada
Catatan: String kandidat dipisahkan oleh spasi, dan string input hanya cocok dari awal string. Output substring yang cocok, juga dipisahkan oleh spasi. Jika tidak ada substring yang cocok dengan berhasil, string kosong adalah output.
Contoh
1) Input: str = chengdu chongqing, tmp = c
Output: output = chengdu chongqing
2) Input: str = chengdu chongqing, tmp = che
Output: end = chengdu
3) Input: str = beijing nanjing, tmp = jing
Output: end =
Metode 1:
paket com.sheepmu.text; impor java.util.arraylist; impor java.util.list; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {string str = "chengdu chongqing"; String tmp = "che"; String output = ""; Hwcompetition hwc = hwcompetition baru (); hwc.auto_complete (str, tmp, output); } void auto_complete (string str string, string tmp, string output) {string [] strs = str.split ("// s"); Daftar <String> Daftar = ArrayList baru <string> (); untuk (int i = 0; i <strs.length; i ++) list.add (strs [i]); System.out.println ("Daftar --->"+Daftar); System.out.println ("tmp --->"+tmp); char [] tmps = tmp.tochararray (); int len_list = list.size (); int len_t = tmps.length; untuk (int j = 0; j <len_list; j ++) {int len_list_j = list.get (j) .length (); char [] list_j = list.get (j) .tochararray (); untuk (int k = 0; k <len_t; k ++) {if (len_t> len_list_j) {list.remove (j); len_list-; // !!!!!!!!!!!!!!!!! J--;//!!!!!!!!!!!!!!!!!!!!!!!! J--;//!!!!!!!!!!!!!!!!!!!!!!!!!!! Jika ini bukan masalahnya, akan ada masalah, karena setelah menghapus ukuran menjadi 1, tetapi j, yaitu, indeks menjadi 1 istirahat; } else {// panjang suhu lebih kecil dari panjang kabel if (tmps [k]! = list_j [k]) {list.remove (j); len_list-; // !!!!!!!!!!!!!!!!! J--;//!!!!!!!!! merusak; }}}} // output = list.toString (); // Ini akan [chengdu], yang akan memiliki [] if (! list.isempty ()) di kedua sisi {stringBuffer sb = stringBuffer baru (); SB.Append ("end ="); untuk (hasil string: daftar) {sb.append (result+""); // tambahkan spasi! Lai Akhirnya, lepaskan "" ekor; } output = sb.toString (). trim (); // !! } else {output = "end ="; } System.out.println (output); }}Metode 2:
paket com.sheepmu.text; impor java.util.arraylist; impor java.util.list; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {string str = "chengdu chongqing"; String tmp = "che"; String output = ""; Hwcompetition hwc = hwcompetition baru (); hwc.auto_complete (str, tmp, output); } void auto_complete (string str string, string tmp, string output) {string [] strs = str.split ("// s"); // sama seperti di bawah ini, itu hanya boleh ditambahkan dengan/s,/d, dll. Daftar <String> Daftar = Daftar Array baru <string> (); untuk (int i = 0; i <strs.length; i ++) list.add (strs [i]); System.out.println ("Daftar --->"+Daftar); System.out.println ("tmp --->"+tmp); int len_list = list.size (); untuk (int j = 0; j <len_list; j ++) {// Ada metode lain yang bagus :! List.get (j) .startswith (tmp); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (! list.get (j) .matches (tmp+"[az]*")) {// ekspresi reguler itu keren !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! daftar.remove (j); len_list--; J--; }} if (! list.isempty ()) {StringBuffer SB = New StringBuffer (); SB.Append ("end ="); untuk (hasil string: daftar) {sb.append (result+""); // tambahkan spasi! Lai Akhirnya, lepaskan "" ekor; } output = sb.toString (). trim (); // !! } else {output = "end ="; } System.out.println (output); }} 3. Masalah penghitungan pertanian (20 poin)
Deskripsi Masalah:
Diketahui bahwa ada sekelompok ayam dan kelinci di pertanian tertentu, dengan total kepala M dan N kaki. Hitung berapa banyak ayam dan kelinci yang total.
Diperlukan untuk mengimplementasikan fungsi:
Publik string getfowlsnum (int iHeadnum, int ifootnum, arraylist ichickennum, arraylist irabbitnum)
【Input】 iHeadnum: Jumlah total header
IFOOTNUM: Jumlah total kaki [output] ichickennum: jumlah ayam
Irabbitnum: jumlah kelinci [kembali] "0": Jumlah ayam dan kelinci yang memenuhi persyaratan
"-1": Tidak ada kuantitas yang cocok dengan persyaratan yang ditemukan
Contoh
Input: iHeadnum = 201, ifootnum = 604
Output: ichickennum.add (100), irabbitnum.add (101) kembali: "0"
Input: iHeadnum = 201, ifootnum = 123
Output: ichickennum.add (0), irabbitnum.add (0) return: "-1"
paket com.sheepmu.text; impor java.util.arraylist; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {int iHeadnum = 201; int ifootnum = 604; ArrayList ichickennum = ArrayList baru (); Arraylist irabbitnum = arraylist baru (); Hwcompetition hwc = hwcompetition baru (); hwc.getfowlsnum (iHeadnum, ifootnum, ichickennum, irabbitnum); } public string getFowlSnum (int iHeadnum, int ifootnum, arraylist ichickennum, arraylist irabbitnum) {if (ifootnum%2! = 0) {// !!! System.out.println ("ichickennum.add (0), irabbitnum.add (0)"); return "-1"; // Jika jumlah kaki aneh, itu jelas salah,} else {int ji = 2*iHeadnum-iFootNum/2; int tui = ifootnum/2- iHeadnum; if (ji> = 0 && tui> = 0) system.out.println ("ichickennum.add ("+ji+"), irabbitnum.add ("+tui+")"); mengembalikan "0"; }}} 4. Kompresi String (30 poin)
Deskripsi Masalah:
Kompres string yang diberikan sesuai dengan spesifikasi dan output string terkompresi. Spesifikasi kompresi adalah: jika karakter yang sama kontinu, maka tekankan ke "Karakter + Nomor", seperti "AAAA" yang dikompres menjadi "A4"
Catatan: 1. Hanya satu karakter yang dikompresi terus menerus, jika Bababa, itu tidak dapat dikompresi.
2. String yang akan dikompresi tidak mengandung angka dan keluar karakter.
Metode implementasi yang diperlukan:
String publik kompressstr (string srcstr) [input] srcstr: string yang akan dikompres [output] tidak ada [return] contoh input string terkompresi: srcstr = "aaaCccddef" return: "a3c3d2ef"
Metode 1: (Gunakan ArrayList) Lihat Ringkasan Komputer Huawei Pertanyaan 8
Metode 2: (Jika Anda menggunakan string, mereka yang tidak dapat dibaca seperti di atas harus terbiasa dengan API)
paket com.sheepmu.text; impor java.util.arraylist; impor java.util.list; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {string str = "abcddef"; Hwcompetition hwc = hwcompetition baru (); String result = hwc.compressstr (str); System.out.println (hasil); } public String CompressStr (String str) {StringBuffer SB = New StringBuffer (); untuk (int i = 0; i <str.length (); i ++) {if (str.length () == 0) break; if (str.length () == 1) SB.Append (str.chargar (i)); // untuk aaaCccddef untuk (int j = i+1; j <str.length (); j ++) {if (str.charat (i) == str.charat (j)) {if (j == str.length ()---str.charat (j)) {if == str.length () = SB.Append (str.length ()). append (str.charat (i)); str = str.substring (j); // panjangnya hanya 0 tersisa. Harus menetapkan str !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! merusak; }} else {// if (j == 1) sb.append (str.charat (i)); lain SB.Append (j) .Append (str.charat (i)); System.out.println (SB.ToString ()); str = str.substring (j); Saya--; merusak; }}} return sb.toString (); }} 5. Algoritma penyortiran (20 poin)
Deskripsi Masalah:
Array integer yang tidak tertib disortir dalam urutan menurun dan array input yang tidak tertib adalah n dan jenisnya tidak ditandatangani int
Diperlukan untuk mengimplementasikan fungsi
void dscsort (const int inputArray [], unsigned int n, int outputArray [])
【Input】 InputArray: Array yang diberikan tidak berurutan
n: Panjang array [output] outputArray: urutkan array [return] Tidak ada contoh input: inputArray = {1,5,4,8,3,2,9,6,7,0}
Output: outputArray = {9,8,7,6,5,4,3,2,1,0}
Metode 1: (langsung panggil API) Ide: pesanan dan output naik secara terbalik
paket com.sheepmu.text; impor java.util.arrays; / * * @author domba */ kelas publik 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 = int int [n]; Hwcompetition hwc = hwcompetition baru (); 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)); }}Metode 2: (Jika pertanyaan menetapkan bahwa API tidak dapat dipanggil)
paket com.sheepmu.text; impor java.util.arrays; / * * @author domba */ kelas publik 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 = int int [n]; Hwcompetition hwc = hwcompetition baru (); hwc.dscsort (inputArray, n, outputArray); System.out.println (arrays.tostring (inputArray)); } void dscsort (int inputArray [], int n, int outputArray []) {// tulis sendiri: fast-order descending int high = 0; int low = n-1; urutkan (inputArray, tinggi, rendah); } void sort (int inputArray [], int high, int low) {int i, j, temp; i = tinggi; // subscript high-end j = low; // low-end subscript temp = inputArray [i]; // tolong elemen pertama sebagai elemen standar. while (i <j) {// Keluar Rekursif rendah> = tinggi sementara (i <j && temp> inputArray [j]) // Backend lebih kecil dari temp dan sesuai dengan urutan turun. Terlepas dari itu, subskrip rendah dipindahkan ke depan-; // Setelah itu selesai, itu mengacu pada suhu yang lebih besar yang lebih besar dari suhu jika (i <j) {inputArray [i] = inputArray [j]; i ++; } while (i <j && temp <inputArray [i]) i ++; if (i <j) {inputArray [j] = inputArray [i]; J--; }} // Sementara setelahnya, yaitu, inputarray penyortiran disk pertama [i] = temp; // Masukkan nilai temp ke posisinya. if (high <i) // perhatikan bahwa nilai value subscript (inputArray, high, i-1); // rekursif untuk array terminal kiri jika (i <low) // Perhatikan bahwa nilai value subscript (inputArray, i+1, rendah); // rekursif untuk array terminal kanan; Membandingkan contoh di atas, pada kenyataannya, saya dan j sama dengan kode berikut !!!!!!!!!!!!!!!!!! }}6. Temukan nomor non-pengulangan terbesar (30 poin)
Deskripsi masalah
Jika tidak ada dua digit berturut -turut dalam ekspresi desimal yang sama, itu disebut "tidak ada nomor pengulangan". Misalnya, 105, 1234, dan 12121 semuanya "tidak ada angka pengulangan", sedangkan 11, 100, dan 1225 tidak. Diberi bilangan bulat positif, kembalikan "tidak ada nomor pengulangan" terkecil dari A. A kurang dari 100.000
Diperlukan untuk mengimplementasikan fungsi
int getNotRePeatnum (int ivalue)
【Input】 LValue: Angka yang diberikan mengembalikan angka minimum non-repeat lebih besar dari nilai [output] tidak ada [pengembalian] Angka non-repeat minimum lebih besar dari input contoh iValue: ivalue = 54
Kembali: 56
Input: Ivalue = 10
Kembali: 12
Input: Ivalue = 98
Kembali: 101
Input: Ivalue = 21099
Kembali: 21201
paket com.sheepmu.text; impor java.util.arrays; impor java.util.scanner; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {pemindai input = pemindai baru (system.in); int a = input.nextInt (); System.out.println ("Nomor input adalah ---->"+a); Hwcompetition hwc = hwcompetition baru (); int result = hwc.getnotrePeatnum (a); System.out.println ("Mengembalikan angka minimum non-repeat lebih besar dari"+a+"---->"+hasil); } int getNotRePeatnum (int ivalue) {int i = 0; untuk (i = ivalue+1; i <100000; i ++) {if (! isRePeatnum (i)) {break; // !!! Kalau tidak, itu akan berjalan berkali -kali dengan sia -sia}} return i; } public boolean isRePeatnum (int a) {string str = a+""; char [] cs = str.tochararray (); int len = cs.length; untuk (int i = 0; i <len-1; i ++) {// Karena i+1 diperlukan nanti, jika saya <len, Anda harus subskrip untuk melewati batas. if (cs [i] == cs [i+1]) kembali true; } return false; }} 7. Perbandingan Kartu Bermain (30 poin)
Deskripsi Masalah:
Dalam poker, jenis kartu meliputi: A (1), 2, 3, 4, 5, 6, 7, 8, 9, t (10), j (11), q (12), k (13), d (Devilkin), B (Belial).
Harap buat program sederhana, masukkan karakter dua kartu, seperti "2" dan "K", dan menilai ukuran kartu. Aturannya adalah sebagai berikut:
B> D> 2> a> k> q> j> 10 ....> 3 yang terkecil adalah 3
Aturan Penghakiman: Bandingkan kartu CFIRSTCARD dan CSECONDCARD. Jika FirstCar besar, kembalikan 1; Jika sama, kembalikan 0; Jika FirstCar kecil, kembalikan -1.
Diperlukan untuk mengimplementasikan fungsi:
Int Compareonecard (Char CFirstcard, Char Csecondcard)
【Input】 Char CFirstCard: Kartu pertama yang perlu dibandingkan
Char Csecondcard: Kartu kedua yang perlu dibandingkan Catatan: Inputnya adalah karakter 'a', '2', ..., '9', 't', 'j', 'q', 'k', 'd', 'b'
[Return] int tipe: Kembalikan hasil perbandingan dua kartu. Catatan: Legalitas input tidak diperlukan, dan ini dijamin oleh pengguna fungsi. Kartu -kartu yang dimasukkan adalah semua karakter '1', '2' ... '9', modal 'a', 't', 'j', 'q', 'k', 'd', 'b'.
Misalnya:
Masukkan: '4', '5', return: -1
Masukkan: '6', '6', kembalikan: 0
paket com.sheepmu.text; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {char cfirstcard = '5'; char csecondcard = '6'; Hwcompetition hwc = hwcompetition baru (); int result = hwc.compareoneCard (CFIRSTCARD, CSECONDCARD); System.out.println ("Hasil Perbandingan"+Hasil); } int CompareOnecard (char cfirstcard, char csecondcard) {int if = getRealln (cfirstcard); System.out.println ("if --->"+ if); int is = getRealln (csecondcard); System.out.println ("is --->"+ is); kembali jika> adalah? 1: Jika <adalah? -1: 0; // Tidak perlu menambahkan braket} int getRealln (char c) {int value = 0; switch (c) {case 't': value = 10; merusak; case 'j': value = 11; merusak; case 'q': value = 12; merusak; case 'k': value = 13; merusak; case 'a': value = 14; merusak; case '2': value = 15; merusak; case 'd': value = 16; merusak; case 'b': value = 17; merusak; kasus '3': case '4': case '5': case '6': case '7': case '8': case '9': // value = c; // kesalahan super bodoh !!! Jika Anda masuk 9, '9' = 57 !!! Nilai karakter 9 bukan angka 9 tetapi nilai karakter itu sendiri. nilai = integer.parseint (c+""); merusak; } nilai pengembalian; }} 8. Sekilas (30 poin)
Deskripsi Masalah:
Di Chengdu, permainan poker populer disebut "Dry Staring". Kartu bermain digunakan, termasuk: A (1), 2, 3, 4, 5, 6, 7, 8, 9, t (10), j (11), Q (12), k (13).
Catatan: 10 diganti dengan T, dan hantu besar dan hantu kecil tidak dipertimbangkan di sini untuk saat ini.
Aturan ukuran untuk kartu dua tangan adalah sebagai berikut:
A) Kartu tunggal: 4 hingga 3, 5 hingga 4, dan hanya ketika kedua kartu hanya sedikit lebih besar yang bisa Anda bandingkan. Urutan perbandingan adalah: a> k> q> j> t> 9> 8> 7> 6> 5> 4> 3.
Misalnya: 6 lebih besar dari 5, tetapi tidak bisa lebih besar dari 4, dan 6 dan 4 tidak dapat dibandingkan. Kartu tunggal 2 adalah kartu khusus, yang dapat dibandingkan dengan semua kartu tunggal biasa lainnya dan merupakan yang terbesar.
Harap dicatat bahwa 3, itu tidak bisa lebih besar dari kartu apa pun.
b) Pasangan: Artinya, titik -titik dari kedua kartu tersebut sama, aturannya mirip dengan yang dari satu kartu, dan pemrosesan serupa juga diperlukan. Dua 2 adalah pasangan khusus dan bisa lebih besar dari semua pasangan lainnya.
Catatan: Anda tidak dapat membandingkan kartu sub dan tunggal.
c) Bom: 3 kartu dengan jumlah poin yang sama. Bom bisa lebih besar dari satu kartu dan pasangan. Perbandingan antara bom tidak perlu seperti satu kartu dan pasangan. Hanya bisa lebih besar untuk dibandingkan.
Selama aturan dipenuhi: 222> aaa> kkk> qq> jjj> tt>…> 333. Artinya, 222 adalah yang terbesar, AAA bisa lebih besar dari KKK atau 333.
d) Aturan lain tidak dipertimbangkan untuk implementasi. Sekarang mohon terapkan program untuk secara otomatis menentukan ukuran kartu di kedua tangan. Catatan: Kartu yang dimasukkan hanya akan muncul dalam tiga jenis: single, pair, dan bom. Jumlah gambar maksimum adalah 3.
Tidak akan ada 2 kartu tunggal. Misalnya, "25", tidak akan ada pasangan plus satu kartu, seperti "334", dll. Anda tidak perlu mempertimbangkan pengecualian input serupa.
Namun, pfirstcards adalah kartu tunggal dan psecondcards adalah pasangan, dan input kombinasi serupa adalah legal.
Diperlukan untuk mengimplementasikan fungsi:
Int CompareCards (char *pfirstcards, char *psecondcards)
【Input】 Char *Pfirstcards: Kartu tangan pertama yang perlu dibandingkan
Char *psecondcards: Tangan kedua yang perlu dibandingkan [return] int tipe, nilai pengembalian deskripsi:
Jika kartu pfirstcard dan psecondcard tidak dapat dibandingkan, seperti "3" dan "6"; "55" dan "6", dll., Kembalikan 0.
Jika kartu pfirstcers lebih besar dari psecondcards, kembalikan 1.
Jika kartu pfirstc sama dengan psecondcards, kembalikan 2.
Jika kartu pfirstcard kurang dari psecondcards, kembalikan 3.
Catatan: Legalitas input tidak perlu, ini dijamin oleh pengguna fungsi. Kartu yang dimasukkan adalah semua karakter '1', '2' .. '9', modal 'a', 't', 'j', 'q', 'k'.
Input contoh: "77", "33", kembalikan: 0
Masukkan: "77", "77", kembalikan: 2
Ide: 1. 1VS2 atau 2VS1 Dalam hal ini, Anda hanya perlu menilai panjangnya untuk mendapatkan hasilnya, tidak diperlukan perbandingan selanjutnya
2. 1VS1 atau 2 VS2 dengan cara yang sama untuk membandingkan
3. Metode perbandingan yang berbeda dari 3VS3 dan Kasus 2
4. 3 vs non-3 atau non-3 VS3
paket com.sheepmu.text; impor java.util.arrays; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {string pfirstcards = "qq"; String psecondcards = "444"; Hwcompetition hwc = hwcompetition baru (); int result = hwc.compparecards (pfirstcards, psecondcards); System.out.println ("Hasil Perbandingan"+Hasil); } int compareCards (string pfirstcards, string psecondcards) {int len1 = pfirstcards.length (); int len2 = pseCondCards.length (); if ((len1 == 1 && len2 == 2) || (len1 == 2 && len2 == 1)) // 1vs2, tidak dapat dibandingkan. Untuk memberikan efisiensi, yang dapat dilakukan terlebih dahulu akan dilakukan, jadi tidak perlu menjalankan situasi berikut. kembali 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) (Len1 == 2 & & len2 == 1) || (len1 == 2 & & LEN2 = 2 && LEN2 == 1) || Metode adalah sama. Faktanya, tidak perlu untuk tanda kurung jika (Math.ABS (IS1 [0] -is2 [0]) == 1) // Saya tahu bahwa panjang 2 jelas sepasang kasus pengembalian IS1 [0] -is2 [0]> 0? 1: 3; lain jika (IS1 [0] == IS2 [0]) kembali 2; lain kembali 0; } if (len1 == 3 && len2 == 3) // Bom tidak bisa sama, karena tidak ada 6 kartu identik di dek. return is1 [0]> IS1 [0]? 1: 3; if (len1 == 3 && len2 <3 || len1 <3 && len2 == 3) return len1 == 3? 1: 3; Kembalikan 0; // Faktanya, kasus uji tidak boleh melaksanakan kalimat ini. } int [] getReallns (string s) {int len = s.length (); int [] cs = int [len] baru; untuk (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; merusak; case 'j': value = 11; merusak; case 'q': value = 12; merusak; case 'k': value = 13; merusak; case 'a': value = 14; merusak; case '2': value = 15; merusak; kasus '3': case '4': case '5': case '6': case '7': case '8': case '9': // value = c; // kesalahan super bodoh !!! Jika Anda masuk 9, '9' = 57 !!! Nilai karakter 9 bukan angka 9 tetapi nilai karakter itu sendiri. nilai = integer.parseint (c+""); merusak; } nilai pengembalian; }} 9. Matriks Transpose (20 poin)
Deskripsi Masalah:
Baris swap dari matriks n*n. ・
Diperlukan untuk mengimplementasikan fungsi:
Matrixtranspose string publik (String inarr, int n)
【Input】 Inarr: Input Karakter Matriks
N: Jumlah baris matriks n*n matriks [return] Catatan karakter yang ditransposkan:
Matriks input dan output adalah array dua dimensi yang disimpan dalam bentuk satu dimensi. Misalnya, inputnya adalah "1,2,3,4,5,6,7,8,9", yang sebenarnya mewakili matriks 3*3 berikut:
1,2,3,4,5,6,7,8,9
Contoh input inarr = "1,2,3,4,5,6,7,8,9", n = 3 pengembalian: "1,4,7,2,5,8,6,9" "
Catatan: Penulis secara artifisial menambahkan judul ke string daripada karakter. Karakter lebih sederhana. Perhatikan string mencegat. 13 bukan 1,3
Metode 1: Matriks digunakan oleh pertanyaan. Anggap saja itu terbiasa dengan array dua dimensi
paket com.sheepmu.text; impor java.util.arrays; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {string inarr = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16" "; int n = 4; System.out.println ("inarr --->"+inarr); Hwcompetition hw = hwcompetition baru (); Hasil string = hw.matrixtranspose (inarr, n); System.out.println ("Hasil ---->"+Hasil); } public string matrixtranspose (string inarr, int n) {// Hapus koma dalam string, jika tidak koma akan menjadi nilai subskrip dari string. Saat output, tambahkan string [] ss = inarr.split (","); String [] [] css = string baru [n] [n]; int k = 0; untuk (int i = 0; i <n; i ++) {// Konversi string menjadi array dua dimensi untuk (int j = 0; j <n; j ++) {css [i] [j] = ss [k]; K ++; }} StringBuffer SB = StringBuffer baru (); untuk (int i = 0; i <n; i ++) {// 2d array terbalik untuk (int j = 0; j <n; j ++) {sb.append (css [j] [i]+","); // Ada satu ekor lagi,}} return sb.substring (0, sb.length ()---1)-1); }} Metode 2: Sederhana, tidak ada matriks yang diperlukan sama sekali.
paket com.sheepmu.text; impor java.util.arrays; / * * @author domba */ kelas publik hwcompetition {public static void main (string [] args) {string inarr = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16" "; int n = 4; System.out.println ("inarr --->"+inarr); Hwcompetition hw = hwcompetition baru (); Hasil string = hw.matrixtranspose (inarr, n); System.out.println ("Hasil ---->"+Hasil); } public string matrixtranspose (string inarr, int n) {// Hapus koma dalam string, jika tidak koma juga akan menjadi nilai subskrip dari string. Saat mengeluarkan, tambahkan string [] ss = inarr.split (","); StringBuffer SB = StringBuffer baru (); untuk (int i = 0; i <n; i ++) {// Untuk contoh pertanyaan: Urutan subskrip yang diperlukan adalah 036147258 untuk (int j = i; j <ss.length; j+= n) {Sb.Pappend (ss [j]+","); // Ada koma pada pengembalian ss (j]+","); koma}} 10. Lampu Jalanan (20 Poin)
Jalan -jalan di ibu kota provinsi dikeluarkan. Untuk memantau pengoperasian lampu jalan, setiap jalan menggunakan string numerik untuk mengidentifikasi operasi semua lampu jalan di jalan.
Asumsikan bahwa lampu jalan hanya memiliki tiga negara bagian berikut (diidentifikasi oleh angka 0, 1, 2, masing -masing, dan lampu jalan hanya sesuai dengan salah satu negara bagian):
0 Lampu jalan tanda mati;
1 lampu jalan dinyalakan;
2 Identifikasi kegagalan lampu jalan;
Silakan temukan jumlah maksimum lampu jalan berturut -turut di negara bagian yang sama di jalan berdasarkan string yang dimasukkan. Jika jumlah lampu jalan di kedua negara bagian adalah sama, negara lampu jalan pertama akan dikembalikan.
Masukkan string negara yang terdiri dari lampu jalan kontinu di jalan. String hanya berisi angka, dan keadaan setiap lampu jalan adalah salah satu dari 0, 1, dan 2. Misalnya, "1101" mewakili 4 lampu jalanan, lampu jalan ketiga berada dalam keadaan keluar, dan 3 lainnya berada dalam keadaan menyala.
Jumlah maksimum lampu jalan yang terus menerus dalam keadaan yang sama adalah output;
Status lampu jalan di atas;
Persyaratan: Output pertama kuantitas, kemudian output status, dan gunakan interval ruang antara kedua bilangan bulat. Misalnya output:
53 2
Input sampel
112200111
Output sampel
3 1
paket com.sheepmu.text; impor java.util.arrays; / * * @Author domba */kelas publik hwcompetition {public static void main (string [] args) {string s = "112001110"; // Jenis pertanyaan ini harus memperhatikan semua situasi yang sama pada akhirnya, yaitu, tidak ada lagi yang berbeda darinya, jika tidak, ia mudah memiliki siklus mati. System.out.println ("inarr --->"+s); Hwcompetition hw = hwcompetition baru (); Hasil string = hw.ludeng (s); System.out.println ("Hasil Pertanyaan ---->"+Hasil); } public String ludeng (string s) {// Hapus koma dalam string, jika tidak koma juga merupakan nilai subskrip dari string. Saat mengeluarkan, tambahkan char [] sebagai = s.tochararray (); int len = as.length; int maxc = 1; // int mubiaobindex = 0; // Jangan membuat variabel tambahan // int mubiaovalue = sebagai [0]; int bindex = 0; // Jika Anda perlu mengembalikan subskrip pertama berturut -turut terbesar, maka 6 saat ini; Jika pertanyaan memiliki persyaratan ini: maka atur dua variabel: berapa kali "per bagian" + subskrip pertama yang muncul. Nilai char = sebagai [0]; // Jika pertanyaan perlu mengembalikan nilai bagian panjang maksimum, yaitu, 1 dari keadaan pertanyaan ini untuk (int i = 0; i <len-1;) {int count = 1; // setiap loop luar adalah untuk menetapkan jumlah ke 1, dan memulai penghitungan baru bindex = i; nilai = sebagai [i]; untuk (int j = i+1; j <len; j ++) {if (as [i]! = sebagai [j]) {i = j; merusak; } else {i ++; // !!!!!!!!!!!!! Jika tidak ada perbedaan yang muncul sesudahnya; Jika kalimat ini tidak ditambahkan, loop luar akan dieksekusi sepanjang waktu. Count ++; }} if (count> maxc) {maxc = count; // mubiaobindex = bindex; // mubiaovalue = nilai; System.out.println ("MAXC --->"+MAXC+"Mulai Subskrip ---->"+BINDEX+"Status ---->"+nilai); }} StringBuffer SB = StringBuffer baru (); return SB.Append (maxc+"") .Append (value) .toString (); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.