คำถามการแข่งขันการเขียนโปรแกรม Huawei ต่อไปนี้ถูกจัดเรียงออนไลน์และรหัสล้วน แต่เป็นการดีบักด้วยตัวเอง เนื่องจากมีคำตอบน้อยลงสำหรับ Java Online ทุกคนยินดีที่จะวิพากษ์วิจารณ์และแก้ไขฉัน ฉันหวังว่ามันจะเป็นประโยชน์เล็กน้อยสำหรับรองเท้าเด็กที่กำลังเตรียมใช้ Huawei บนคอมพิวเตอร์ เติบโตขึ้นในระหว่างการฝึกซ้อมมาเลย! -
1. การตรวจสอบการรับประทานอาหารแบบสุ่ม (30 คะแนน)
คำอธิบายปัญหา:
เนื่องจากผู้คนจำนวนมากใน บริษัท บางแห่งมื้อกลางวันจะถูกแบ่งออกเป็นหลายชุดของมื้ออาหารและต้องใช้เวลาอาหารอย่างเคร่งครัดสำหรับแต่ละชุด และตรวจสอบสถานการณ์การรับประทานอาหารเป็นประจำ โปรดเขียนโปรแกรมเพื่อให้ได้การตรวจสอบแบบสุ่มเกี่ยวกับการรับประทานอาหาร
จำเป็นต้องใช้ฟังก์ชั่น:
เป็นโมฆะ check_lunch (int num, เวลา int, int input [], เอาต์พุต int [])
【อินพุต】จำนวนจำนวนคนกินทั้งหมด
เวลา int จำนวนมื้ออาหารในแบทช์
อินพุตถ่าน [], สถานการณ์การรับประทานอาหาร
utput เอาต์พุต】 char output [], สถานการณ์การรับประทานอาหารที่ผิดกฎหมาย
【 return 】 none
หมายเหตุ: สำหรับสถานการณ์ที่การรับประทานอาหารแบ่งออกเป็น 3 แบทช์ 12 คนกินสถานการณ์การรับประทานอาหารที่ถูกต้องควรแจกจ่ายดังนี้ [1, 2, 3, 1, 2, 3, 1, 2, 3] หากไม่ตรงกับการกระจายนี้มันเป็นการละเมิดและตำแหน่งที่สอดคล้องกันคือ 0 เมื่อเอาต์พุต
ตัวอย่าง
1) อินพุต: num = 12, เวลา = 3, อินพุต = [1,2,3,3,1,3,1,1,1,1,1,2,3]
เอาท์พุท: เอาท์พุท = [1,2,3,0,0,3,1,0,0,0,1,2,3]
2) อินพุต: num = 11, เวลา = 4, intput = [1,2,3,4,2,3,3,4,1,2,3]
เอาท์พุท: เอาท์พุท = [1,2,3,4,0,0,0,3,4,1,2,3]
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int num = 11, เวลา = 4; int [] input = {1,2,3,4,2,3,3,3,4,1,1,2,3}; // int [] output = new int [] {}; int [] output = new int [num]; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); hwc.check_lunch (จำนวน, เวลา, อินพุต, เอาต์พุต); } void check_lunch (int num, เวลา int, int input [], int output []) {system.out.println (array.toString (อินพุต)); int j = 0; สำหรับ (int i = 0; i <num; i ++) {int yushu = (i+1)%เวลา; ถ้า (yushu! = 0) {ถ้า (อินพุต [i] == yushu) {เอาต์พุต [j] = yushu; } เอาท์พุทอื่น [j] = 0; J ++; } else {// กรณีของส่วนที่เหลือ == 0 ถ้า (อินพุต [i] == เวลา) {เอาต์พุต [j] = เวลา; } เอาท์พุทอื่น [j] = 0; J ++; }} system.out.println (array.toString (เอาต์พุต)); -2. ป้อน Lenovo (30 คะแนน)
คำอธิบายปัญหา:
อินพุตของฟังก์ชั่นการเชื่อมโยงเป็นฟังก์ชั่นที่ใช้งานได้จริงโปรดโปรแกรมและใช้ฟังก์ชั่นที่คล้ายกัน
จำเป็นต้องใช้ฟังก์ชั่น:
เป็นโมฆะ Auto_Complete (Char *Str, Char *TMP, Char *output)
【อินพุต】 char *str, สตริงผู้สมัคร
ถ่าน *tmp, สตริงอินพุต
【เอาต์พุต】 int *เอาต์พุตสตริงการจับคู่สำหรับการเชื่อมโยง
【 return 】 none
หมายเหตุ: สตริงผู้สมัครจะถูกคั่นด้วยช่องว่างและสตริงอินพุตตรงกับเฉพาะจากจุดเริ่มต้นของสตริง เอาต์พุต substrings ที่ตรงกันซึ่งคั่นด้วยช่องว่าง หากไม่มีสตริงย่อยที่เข้ากันได้สำเร็จสตริงว่างจะเป็นเอาต์พุต
ตัวอย่าง
1) อินพุต: str = chengdu chongqing, tmp = c
เอาท์พุท: เอาท์พุท = Chengdu Chongqing
2) อินพุต: str = chengdu chongqing, tmp = che
เอาท์พุท: สิ้นสุด = เฉิงตู
3) อินพุต: str = ปักกิ่งหนานจิง, tmp = jing
เอาท์พุท: end =
วิธีที่ 1:
แพ็คเกจ com.sheepmu.text; นำเข้า java.util.arraylist; นำเข้า java.util.list; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {string str = "Chengdu Chongqing"; สตริง tmp = "che"; string output = ""; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); hwc.auto_complete (str, tmp, เอาต์พุต); } void auto_complete (string str, string tmp, output สตริง) {string [] strs = str.split ("// s"); รายการ <string> list = new ArrayList <String> (); สำหรับ (int i = 0; i <strs.length; i ++) list.add (strs [i]); System.out.println ("รายการ --->"+รายการ); System.out.println ("tmp --->"+tmp); ถ่าน [] tmps = tmp.tochararray (); int len_list = list.size (); int len_t = tmps.length; สำหรับ (int j = 0; j <len_list; j ++) {int len_list_j = list.get (j) .length (); char [] list_j = list.get (j) .tochararray (); สำหรับ (int k = 0; k <len_t; k ++) {ถ้า (len_t> len_list_j) {list.remove (j); len_list-; // !!!!!!!!!!!!!!!!! J-; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!! J-; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! หากไม่ใช่กรณีนี้จะมีปัญหาเพราะหลังจากลบขนาดกลายเป็น 1 แต่ J นั่นคือดัชนีจะกลายเป็น 1 ตัวแบ่ง; } else {// ความยาวของอุณหภูมิมีขนาดเล็กกว่าความยาวของสายเคเบิลถ้า (tmps [k]! = list_j [k]) {list.remove (j); len_list-; // !!!!!!!!!!!!!!!!! J-; // !!!!!!!!! หยุดพัก; }}}} // output = list.toString (); // สิ่งนี้จะ [chengdu] ซึ่งจะมี [] ถ้า (! list.isempty ()) ทั้งสองด้าน {Stringbuffer sb = new Stringbuffer (); sb.append ("end ="); สำหรับ (สตริงผลลัพธ์: รายการ) {sb.append (ผลลัพธ์+""); // เพิ่มช่องว่าง! - ในที่สุดลบ "" ของหาง; } output = sb.toString (). trim (); // !! } else {output = "end ="; } system.out.println (เอาต์พุต); -วิธีที่ 2:
แพ็คเกจ com.sheepmu.text; นำเข้า java.util.arraylist; นำเข้า java.util.list; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {string str = "Chengdu Chongqing"; สตริง tmp = "che"; string output = ""; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); hwc.auto_complete (str, tmp, เอาต์พุต); } void auto_complete (string str, string tmp, output สตริง) {string [] strs = str.split ("// s"); // เหมือนกับด้านล่างควรเพิ่มด้วย/s,/d, ฯลฯ สำหรับ (int i = 0; i <strs.length; i ++) list.add (strs [i]); System.out.println ("รายการ --->"+รายการ); System.out.println ("tmp --->"+tmp); int len_list = list.size (); สำหรับ (int j = 0; j <len_list; j ++) {// มีวิธีการที่ดีอีกวิธีหนึ่ง:! list.get (j). startswith (tmp); !!!!!!!!!!!!!!!!!!!!!!!!!!!!! if (! list.get (j). -matches (tmp+"[az]*")) {// นิพจน์ทั่วไปเย็น !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! list.remove (j); len_list--; J--; }} if (! list.isempty ()) {StringBuffer sb = new StringBuffer (); sb.append ("end ="); สำหรับ (สตริงผลลัพธ์: รายการ) {sb.append (ผลลัพธ์+""); // เพิ่มช่องว่าง! - ในที่สุดลบ "" ของหาง; } output = sb.toString (). trim (); // !! } else {output = "end ="; } system.out.println (เอาต์พุต); - 3. ปัญหาการนับฟาร์ม (20 คะแนน)
คำอธิบายปัญหา:
เป็นที่ทราบกันดีว่ามีกลุ่มของไก่และกระต่ายในฟาร์มแห่งหนึ่งมีหัว M ทั้งหมดและ N ฟุต คำนวณจำนวนไก่และกระต่ายทั้งหมด
จำเป็นต้องใช้ฟังก์ชั่น:
Public String getFowlsnum (int iheadnum, int ifootnum, arraylist ichickennum, arraylist irabbitnum)
【อินพุต】 iheadnum: จำนวนส่วนหัวทั้งหมด
ifootnum: จำนวนฟุตทั้งหมด [เอาท์พุท] Ichickennum: จำนวนไก่
irabbitnum: จำนวนกระต่าย [return] "0": จำนวนไก่และกระต่ายที่ตรงตามข้อกำหนด
"-1": ไม่พบปริมาณที่ตรงกับข้อกำหนด
ตัวอย่าง
อินพุต: iheadnum = 201, ifootnum = 604
เอาท์พุท: ichickennum.add (100), irabbitnum.add (101) กลับ: "0"
อินพุต: iheadnum = 201, ifootnum = 123
เอาท์พุท: ichickennum.add (0), irabbitnum.add (0) return: "-1"
แพ็คเกจ com.sheepmu.text; นำเข้า java.util.arraylist; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int iheadnum = 201; int ifootnum = 604; arraylist ichickennum = new ArrayList (); arraylist irabbitnum = new ArrayList (); HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); hwc.getfowlsnum (iheadnum, ifootnum, ichickennum, irabbitnum); } สตริงสาธารณะ getFowlsnum (int iheadnum, int ifootnum, arraylist ichickennum, arraylist irabbitnum) {ถ้า (ifootnum%2! = 0) {// !!! System.out.println ("ichickennum.add (0), irabbitnum.add (0)"); return "-1"; // ถ้าจำนวนฟุตเป็นคี่มันผิดอย่างเห็นได้ชัด} อื่น {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+")"); กลับ "0"; - 4. การบีบอัดสตริง (30 คะแนน)
คำอธิบายปัญหา:
บีบอัดสตริงที่กำหนดตามข้อกำหนดและส่งออกสตริงที่บีบอัด ข้อมูลจำเพาะการบีบอัดคือ: หากอักขระเดียวกันต่อเนื่องให้บีบอัดเป็น "อักขระ + หมายเลข" เช่น "AAAA" ที่ถูกบีบอัดเป็น "A4"
หมายเหตุ: 1. มีเพียงอักขระตัวเดียวที่ถูกบีบอัดอย่างต่อเนื่องถ้า bababa มันไม่สามารถบีบอัดได้
2. สตริงที่ถูกบีบอัดไม่มีตัวเลขและอักขระหลบหนี
วิธีการใช้งานที่จำเป็น:
Public String Compressstr (String SRCSTR) [อินพุต] SRCSTR: สตริงที่จะบีบอัด [เอาต์พุต] ไม่มี [return] ตัวอย่างอินพุตของสตริงบีบอัด: srcstr = "aaacccddef" return: "A3C3D2EF"
วิธีที่ 1: (ใช้ ArrayList) ดูสรุปคอมพิวเตอร์ Huawei คำถามที่ 8
วิธีที่ 2: (ถ้าคุณใช้สตริงผู้ที่ไม่สามารถอ่านได้เท่าที่ควรจะคุ้นเคยกับ API)
แพ็คเกจ com.sheepmu.text; นำเข้า java.util.arraylist; นำเข้า java.util.list; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {string str = "abcddef"; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); สตริงผลลัพธ์ = hwc.compressstr (str); System.out.println (ผลลัพธ์); } สตริงสาธารณะ compressstr (string str) {stringbuffer sb = new StringBuffer (); สำหรับ (int i = 0; i <str.length (); i ++) {ถ้า (str.length () == 0) break; if (str.length () == 1) sb.append (str.charat (i)); // สำหรับ aaacccddef สำหรับ (int j = i+1; j <str.length (); j ++) {ถ้า (str.charat (i) == str.charat (j)) sb.append (str.length ()). ผนวก (str.charat (i)); str = str.substring (j); // ความยาวเหลือเพียง 0 เท่านั้น ต้องกำหนดให้กับ Str ใหม่ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! หยุดพัก; }} else {// ถ้า (j == 1) sb.append (str.charat (i)); else sb.append (j) .append (str.charat (i)); System.out.println (sb.toString ()); str = str.substring (j); ฉัน--; หยุดพัก; }}} ส่งคืน sb.toString (); - 5. อัลกอริทึมการเรียงลำดับ (20 คะแนน)
คำอธิบายปัญหา:
อาร์เรย์จำนวนเต็มที่ไม่ได้เรียงลำดับจะถูกจัดเรียงตามลำดับจากมากไปน้อยและอาร์เรย์ที่ไม่ได้เรียงลำดับอินพุตคือ n และประเภทที่ไม่ได้ลงนาม
จำเป็นต้องใช้ฟังก์ชั่น
เป็นโมฆะ dscsort (const inputarray [], int n ที่ไม่ได้ลงชื่อ, int outputarray [])
【อินพุต】 inputarray: อาร์เรย์ที่ไม่ได้เรียงลำดับที่กำหนด
N: ความยาวอาร์เรย์ [เอาท์พุท] OutputArray: เรียงลำดับอาร์เรย์ [return] ไม่มีตัวอย่างอินพุต: inputarray = {1,5,4,8,3,2,9,6,7,7,0}}
เอาท์พุท: outputArray = {9,8,7,6,5,4,3,2,1,0}
วิธีที่ 1: (เรียกโดยตรงกับ API) แนวคิด: คำสั่งซื้อจากน้อยไปหามากขึ้นและส่งออกย้อนกลับ
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int [] inputarray = {1,5,4,8,3,2,9,6,7,7,0}; int n = inputarray.length; int [] outputArray = new int [n]; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); hwc.dscsort (inputarray, n, outputarray); } void dscsort (intputarray [], int n, int outputArray []) {array.sort (inputarray); // ccoending int i = 0; ในขณะที่ (-n> = 0) {outputarray [i ++] = inputarray [n]; } system.out.println (array.toString (outputarray)); -วิธีที่ 2: (ถ้าคำถามกำหนดว่า API ไม่สามารถเรียกได้)
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int [] inputarray = {1,5,4,8,3,2,9,6,7,7,0}; int n = inputarray.length; int [] outputArray = new int [n]; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); hwc.dscsort (inputarray, n, outputarray); System.out.println (array.toString (inputarray)); } void dscsort (intputarray [], int n, int outputArray []) {// เขียนด้วยตัวเอง: ลำดับที่รวดเร็วลง int high = 0; int low = n-1; เรียงลำดับ (inputarray, สูง, ต่ำ); } void sort (intputarray [], int สูง, int ต่ำ) {int i, j, temp; i = high; // ตัวห้อยไฮเอนด์ j = ต่ำ; // low-end subscript temp = inputarray [i]; // โปรดองค์ประกอบแรกเป็นองค์ประกอบมาตรฐาน ในขณะที่ (i <j) {// ทางออกแบบเรียกซ้ำต่ำ> = สูงในขณะที่ (i <j && temp> inputarray [j]) // แบ็กเอนด์มีขนาดเล็กกว่าอุณหภูมิและสอดคล้องกับลำดับจากมากไปน้อย โดยไม่คำนึงถึงมันตัวห้อยต่ำจะถูกย้ายไปข้างหน้า j-; // หลังจากนั้นเสร็จแล้วมันหมายถึงอุณหภูมิที่ใหญ่กว่าที่มีขนาดใหญ่กว่าอุณหภูมิถ้า (i <j) {inputarray [i] = inputarray [j]; i ++; } ในขณะที่ (i <j && temp <inputarray [i]) i ++; if (i <j) {inputarray [j] = inputarray [i]; J--; }} // ในขณะที่หลังจากนั้นคือการเรียงลำดับดิสก์ครั้งแรกการเรียงลำดับ inputarray [i] = temp; // วางค่าอุณหภูมิลงในตำแหน่งของมัน ถ้า (สูง <i) // โปรดทราบว่าการเรียงลำดับตัวห้อย (inputarray, สูง, i-1); // เรียกซ้ำสำหรับอาร์เรย์เทอร์มินัลด้านซ้ายถ้า (i <ต่ำ) // โปรดทราบว่าการเรียงลำดับค่าตัวห้อย การเปรียบเทียบตัวอย่างข้างต้นอันที่จริงแล้วฉันและ J เหมือนกับรหัสต่อไปนี้ !!!!!!!!!!!!!!!! -6. ค้นหาหมายเลขที่ไม่ซ้ำใหญ่ที่สุด (30 คะแนน)
คำอธิบายปัญหา
หากไม่มีตัวเลขสองหลักติดต่อกันในนิพจน์ทศนิยมเดียวกันมันจะเรียกว่า "ไม่มีหมายเลขซ้ำ" ตัวอย่างเช่น 105, 1234 และ 12121 ล้วนเป็น "ไม่มีหมายเลขซ้ำ" ในขณะที่ 11, 100 และ 1225 ไม่ใช่ ให้จำนวนเต็มบวก A ให้ส่งคืน "ไม่มีหมายเลขการทำซ้ำ" ที่เล็กที่สุดที่มากกว่า A. A น้อยกว่า 100,000
จำเป็นต้องใช้ฟังก์ชั่น
int getNotRepeatnum (int ivalue)
【อินพุต】 lvalue: หมายเลขที่กำหนดส่งคืนหมายเลขที่ไม่ซ้ำขั้นต่ำมากกว่าค่า [เอาท์พุท] ไม่มี [return] หมายเลขที่ไม่ซ้ำขั้นต่ำมากกว่าการป้อนตัวอย่างอินพุต: ivalue = 54
กลับมา: 56
อินพุต: ivalue = 10
กลับมา: 12
อินพุต: ivalue = 98
กลับมา: 101
อินพุต: ivalue = 21099
กลับมา: 21201
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; นำเข้า java.util.scanner; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {อินพุตสแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); int a = input.nextint (); System.out.println ("หมายเลขอินพุตคือ ---->"+a); HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); int result = hwc.getNotRepeatnum (a); System.out.println ("ส่งคืนหมายเลขที่ไม่ซ้ำขั้นต่ำมากกว่า"+a+"---->"+ผลลัพธ์); } int getNotRepeatnum (int ivalue) {int i = 0; สำหรับ (i = ivalue+1; i <100000; i ++) {ถ้า (! isrepeatnum (i)) {break; // !!! มิฉะนั้นมันจะทำงานหลายครั้งโดยไร้ประโยชน์}} return i; } บูลีนสาธารณะ isRepeatnum (int a) {string str = a+""; ถ่าน [] cs = str.tochararray (); int len = cs.length; สำหรับ (int i = 0; i <len-1; i ++) {// เพราะฉันต้องการ i+1 ในภายหลังถ้ามันคือฉัน <len คุณต้องสมัครสมาชิกเพื่อข้ามขอบเขต ถ้า (cs [i] == cs [i+1]) ส่งคืนจริง; } return false; - 7. การเปรียบเทียบการ์ดเล่น (30 คะแนน)
คำอธิบายปัญหา:
ในโป๊กเกอร์ประเภทของการ์ดรวมถึง: A (1), 2, 3, 4, 5, 6, 7, 8, 9, T (10), J (11), Q (12), K (13), D (Devilkin), B (Belial)
โปรดสร้างโปรแกรมง่าย ๆ ป้อนอักขระของไพ่สองใบเช่น "2" และ "K" และตัดสินขนาดของการ์ด กฎมีดังนี้:
b> d> 2> a> k> q> j> 10 .... > 3 สิ่งที่เล็กที่สุดคือ 3
กฎการตัดสิน: เปรียบเทียบ CFIRSTCARD และ CSECONDCARD ถ้ารถ FirstCar มีขนาดใหญ่ให้กลับมา 1; ถ้าเหมือนกันให้ส่งคืน 0; ถ้า FirstCar มีขนาดเล็กให้กลับมา -1
จำเป็นต้องใช้ฟังก์ชั่น:
Int CompareOnecard (Char Cfirstcard, Char CSECONDCARD)
【อินพุต】ถ่าน cfirstcard: การ์ดใบแรกที่ต้องเปรียบเทียบ
ถ่าน CSECONDCARD: การ์ดใบที่สองที่ต้องเปรียบเทียบหมายเหตุ: อินพุตคือตัวละคร 'A', '2', ... , '9', 'T', 'J', 'Q', 'K', 'D', 'B'
[return] int type: ส่งคืนผลการเปรียบเทียบของไพ่สองใบ หมายเหตุ: ความถูกต้องตามกฎหมายของอินพุตไม่จำเป็นและสิ่งนี้รับประกันได้จากผู้ใช้ฟังก์ชั่น การ์ดที่ป้อนเป็นตัวละครทั้งหมด '1', '2' … '9', ทุน 'A', 't', 'J', 'Q', 'K', 'D', 'B'
ตัวอย่างเช่น:
Enter: '4', '5', return: -1
Enter: '6', '6', return: 0
แพ็คเกจ com.sheepmu.text; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {char cfirstcard = '5'; ถ่าน CSECONDCARD = '6'; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); int result = hwc.compareonecard (cfirstcard, csecondcard); System.out.println ("ผลลัพธ์ของการเปรียบเทียบ"+ผลลัพธ์); } int compareOnecard (ถ่าน cfirstcard, ถ่าน csecondcard) {int if = getRealln (cfirstcard); System.out.println ("ถ้า --->"+ ถ้า); int คือ = getRealln (CSECONDCARD); System.out.println ("IS --->"+ IS); return ถ้า> คือ? 1: ถ้า <คือ? -1: 0; // ไม่จำเป็นต้องเพิ่มวงเล็บ} int getRealln (ถ่าน C) {ค่า int = 0; สวิตช์ (c) {case 't': value = 10; หยุดพัก; กรณี 'j': value = 11; หยุดพัก; กรณี 'Q': value = 12; หยุดพัก; กรณี 'k': ค่า = 13; หยุดพัก; กรณี 'a': ค่า = 14; หยุดพัก; กรณี '2': ค่า = 15; หยุดพัก; กรณี 'd': ค่า = 16; หยุดพัก; กรณี 'B': ค่า = 17; หยุดพัก; กรณี '3': กรณี '4': กรณี '5': กรณี '6': กรณี '7': กรณี '8': กรณี '9': // value = C; // ข้อผิดพลาด Super Stupid !!! ถ้าคุณป้อน 9, '9' = 57 !!! ค่าของอักขระ 9 ไม่ใช่หมายเลข 9 แต่ค่าของตัวละครเอง value = integer.parseint (c+""); หยุดพัก; } ค่าส่งคืน; - 8. เหลือบ (30 คะแนน)
คำอธิบายปัญหา:
ในเฉิงตูเกมโป๊กเกอร์ยอดนิยมเรียกว่า "Dry Staring" ใช้การ์ดเล่นรวมถึง: A (1), 2, 3, 4, 5, 6, 7, 8, 9, T (10), J (11), Q (12), K (13)
หมายเหตุ: 10 ถูกแทนที่ด้วย T และผีตัวใหญ่และผีน้อยจะไม่ได้รับการพิจารณาที่นี่ในขณะนี้
กฎขนาดสำหรับการ์ดสองมือมีดังนี้:
A) การ์ดใบเดียว: 4 ถึง 3, 5 ถึง 4 และเฉพาะเมื่อไพ่ทั้งสองใบมีขนาดใหญ่กว่าเล็กน้อยคุณสามารถเปรียบเทียบได้ ลำดับของการเปรียบเทียบคือ: a> k> q> j> t> 9> 8> 7> 6> 5> 4> 3
ตัวอย่างเช่น: 6 มากกว่า 5 แต่ไม่สามารถเปรียบเทียบได้มากกว่า 4 และ 6 และ 4 ไม่สามารถเปรียบเทียบได้ การ์ดใบเดียว 2 เป็นการ์ดพิเศษซึ่งสามารถเปรียบเทียบกับการ์ดใบเดียวอื่น ๆ ทั้งหมดและใหญ่ที่สุด
โปรดทราบว่า 3 ไม่สามารถมากกว่าการ์ดใด ๆ
b) คู่: นั่นคือจุดของไพ่สองใบเหมือนกันกฎนั้นคล้ายกับการ์ดใบเดียวและจำเป็นต้องมีการประมวลผลที่คล้ายกัน สอง 2 เป็นคู่พิเศษและอาจใหญ่กว่าคู่อื่น ๆ ทั้งหมด
หมายเหตุ: คุณไม่สามารถเปรียบเทียบไพ่ย่อยและการ์ดเดี่ยวได้
c) ระเบิด: การ์ด 3 ใบที่มีจำนวนคะแนนเท่ากัน ระเบิดอาจมีขนาดใหญ่กว่าการ์ดเดียวและคู่ใด ๆ การเปรียบเทียบระหว่างระเบิดไม่จำเป็นต้องเป็นเหมือนการ์ดใบเดียวและคู่ มันสามารถเปรียบเทียบได้มากขึ้นเท่านั้น
ตราบใดที่มีการปฏิบัติตามกฎ: 222> aaa> kkk> qq> jjj> tt> …> 333 นั่นคือ 222 เป็น AAA ที่ใหญ่ที่สุดอาจมากกว่า KKK หรือ 333
d) กฎอื่น ๆ ไม่ได้รับการพิจารณาสำหรับการดำเนินการ ตอนนี้โปรดใช้โปรแกรมเพื่อกำหนดขนาดของการ์ดโดยอัตโนมัติในมือทั้งสอง หมายเหตุ: การ์ดที่ป้อนจะปรากฏในสามประเภทเท่านั้น: เดี่ยวคู่และระเบิด จำนวนภาพสูงสุดคือ 3
จะไม่มีใบเดียว 2 ใบ ตัวอย่างเช่น "25" จะไม่มีคู่บวกการ์ดใบเดียวเช่น "334" ฯลฯ คุณไม่จำเป็นต้องพิจารณาข้อยกเว้นอินพุตที่คล้ายกัน
อย่างไรก็ตาม pfirstcards เป็นการ์ดใบเดียวและ psecondcards เป็นคู่และอินพุตชุดค่าผสมที่คล้ายกันนั้นถูกกฎหมาย
จำเป็นต้องใช้ฟังก์ชั่น:
int compolecards (Char *pfirstcards, Char *psecondcards)
【อินพุต】 char *pfirstcards: การ์ดมือแรกที่ต้องเปรียบเทียบ
ถ่าน *psecondcards: มือสองที่ต้องเปรียบเทียบ [return] ประเภท int, ค่าส่งคืนคำอธิบาย:
หากไม่สามารถเปรียบเทียบ pfirstcards และ psecondcards เช่น "3" และ "6"; "55" และ "6" ฯลฯ กลับ 0
หาก pfirstcards มากกว่า psecondcards ให้ส่งคืน 1
หาก pfirstcards เท่ากับ psecondcards ให้กลับมา 2
หาก pfirstcards น้อยกว่า psecondcards ให้กลับมา 3
หมายเหตุ: ความถูกต้องตามกฎหมายของอินพุตไม่จำเป็นต้องรับประกันโดยผู้ใช้ฟังก์ชัน การ์ดที่ป้อนเป็นตัวละครทั้งหมด '1', '2' .. '9', ทุน 'a', 't', 'J', 'Q', 'K'
อินพุตตัวอย่าง: "77", "33", return: 0
Enter: "77", "77", return: 2
แนวคิด: 1. 1VS2 หรือ 2VS1 ในกรณีนี้คุณจะต้องตัดสินความยาวเพื่อให้ได้ผลลัพธ์ไม่จำเป็นต้องมีการเปรียบเทียบที่ตามมา
2. 1VS1 หรือ 2 vs2 วิธีเดียวกันในการเปรียบเทียบ
3. วิธีการเปรียบเทียบที่แตกต่างกันของ 3VS3 และกรณี 2
4. 3 เทียบกับไม่ใช่ 3 หรือไม่ใช่ 3 vs3
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สตริง pfirstcards = "qq"; สตริง psecondCards = "444"; HWCOMPETITION HWC = HWCOMPETITION ใหม่ (); int result = hwc.comparecards (pfirstcards, psecondcards); System.out.println ("ผลลัพธ์ของการเปรียบเทียบ"+ผลลัพธ์); } int compolecards (String pfirstcards, String psecondcards) {int len1 = pfirstcards.length (); int len2 = psecondcards.length (); if ((len1 == 1 && len2 == 2) || (len1 == 2 && len2 == 1)) // 1VS2 ไม่สามารถเปรียบเทียบได้ เพื่อให้มีประสิทธิภาพสิ่งที่สามารถทำได้ก่อนจะทำได้ดังนั้นจึงไม่จำเป็นต้องดำเนินการสถานการณ์ต่อไปนี้ กลับ 0; int [] is1 = getReallns (pfirstcards); int [] is2 = getReallns (psecondcards); // system.out.println (array.toString (is1)); // [12, 12] // system.out.println (array.toString (is2)); // [4, 4, 4] ถ้า (len1 == 1 && len2 == 1) || วิธีการเหมือนกัน ในความเป็นจริงไม่จำเป็นต้องใช้วงเล็บถ้า (Math.Abs (IS1 [0] -IS2 [0]) == 1) // ฉันรู้ว่าความยาว 2 เป็นคู่ของเคสที่ส่งคืน IS1 [0] -IS2 [0]> 0? 1: 3; อื่นถ้า (is1 [0] == is2 [0]) return 2; กลับมาอีก 0; } ถ้า (len1 == 3 && len2 == 3) // ระเบิดไม่เท่ากันเพราะไม่มีการ์ดที่เหมือนกัน 6 ใบในเด็ค return is1 [0]> is1 [0]? 1: 3; if (len1 == 3 && len2 <3 || len1 <3 && len2 == 3) return len1 == 3? 1: 3; กลับ 0; // อันที่จริงกรณีทดสอบไม่ควรเรียกใช้ประโยคนี้ } int [] getReallns (สตริง s) {int len = s.length (); int [] cs = new int [len]; สำหรับ (int i = 0; i <len; i ++) {cs [i] = getRealln (S.Charat (i)); } ส่งคืน CS; } int getRealln (ถ่าน c) {ค่า int = 0; สวิตช์ (c) {case 't': value = 10; หยุดพัก; กรณี 'j': value = 11; หยุดพัก; กรณี 'Q': value = 12; หยุดพัก; กรณี 'k': ค่า = 13; หยุดพัก; กรณี 'a': ค่า = 14; หยุดพัก; กรณี '2': ค่า = 15; หยุดพัก; กรณี '3': กรณี '4': กรณี '5': กรณี '6': กรณี '7': กรณี '8': กรณี '9': // value = C; // ข้อผิดพลาด Super Stupid !!! ถ้าคุณป้อน 9, '9' = 57 !!! ค่าของอักขระ 9 ไม่ใช่หมายเลข 9 แต่ค่าของตัวละครเอง value = integer.parseint (c+""); หยุดพัก; } ค่าส่งคืน; - 9. เมทริกซ์ transpose (20 คะแนน)
คำอธิบายปัญหา:
SWAP ROWS ของเมทริกซ์ N*N -
จำเป็นต้องใช้ฟังก์ชั่น:
สตริงสาธารณะ matrixtranspose (String Inarr, int n)
【อินพุต】 Inarr: อินพุตอักขระเมทริกซ์
N: จำนวนแถวของ N*N matrix [return] เมทริกซ์อักขระที่เปลี่ยนไปหมายเหตุ:
เมทริกซ์อินพุตและเอาต์พุตเป็นอาร์เรย์สองมิติที่เก็บไว้ในรูปแบบหนึ่งมิติ ตัวอย่างเช่นอินพุตคือ "1,2,3,4,5,6,7,8,9" ซึ่งจริง ๆ แล้วแสดงถึง 3*3 เมทริกซ์ต่อไปนี้:
1,2,3,4,5,6,7,8,9
ตัวอย่างอินพุต inarr = "1,2,3,4,5,6,7,7,8,9", n = 3 ผลตอบแทน: "1,4,7,2,5,8,3,6,9"
หมายเหตุ: ผู้เขียนได้เพิ่มชื่อเป็นสตริงมากกว่าตัวละคร อักขระนั้นง่ายกว่า ให้ความสนใจกับสตริงที่สกัดกั้น 13 ไม่ใช่ 1,3
วิธีการที่ 1: เมทริกซ์ถูกใช้โดยคำถาม แค่คิดว่ามันคุ้นเคยกับอาร์เรย์สองมิติ
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {String inarr = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16"; int n = 4; System.out.println ("inarr --->"+inarr); hwCompetition hw = hwcompetition ใหม่ (); สตริงผลลัพธ์ = hw.matrixtranspose (inarr, n); System.out.println ("ผลลัพธ์ ---->"+ผลลัพธ์); } สตริงสาธารณะ matrixtranspose (สตริง inarr, int n) {// ลบเครื่องหมายจุลภาคในสตริงมิฉะนั้นเครื่องหมายจุลภาคจะเป็นค่าตัวห้อยของสตริง เมื่อเอาต์พุตให้เพิ่มสตริง [] ss = inarr.split (","); สตริง [] [] css = สตริงใหม่ [n] [n]; int k = 0; สำหรับ (int i = 0; i <n; i ++) {// แปลงสตริงเป็นอาร์เรย์สองมิติสำหรับ (int j = 0; j <n; j ++) {css [i] [j] = ss [k]; K ++; }} StringBuffer sb = new StringBuffer (); สำหรับ (int i = 0; i <n; i ++) {// 2d อาร์เรย์ผกผันสำหรับ (int j = 0; j <n; j ++) {sb.append (css [j] [i]+","); - วิธีที่ 2: ง่ายกว่าไม่จำเป็นต้องใช้เมทริกซ์เลย
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; / * * @author sheepmu */ คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {String inarr = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16"; int n = 4; System.out.println ("inarr --->"+inarr); hwCompetition hw = hwcompetition ใหม่ (); สตริงผลลัพธ์ = hw.matrixtranspose (inarr, n); System.out.println ("ผลลัพธ์ ---->"+ผลลัพธ์); } สตริงสาธารณะ matrixtranspose (สตริง inarr, int n) {// ลบเครื่องหมายจุลภาคในสตริงมิฉะนั้นเครื่องหมายจุลภาคจะเป็นค่าตัวห้อยของสตริง เมื่อส่งออกให้เพิ่มสตริง [] ss = inarr.split (","); StringBuffer sb = new StringBuffer (); สำหรับ (int i = 0; i <n; i ++) {// สำหรับตัวอย่างคำถาม: ลำดับตัวห้อยที่ต้องการคือ 036147258 สำหรับ (int j = i; j <ss.length; j+= n) {sb.append (ss [j]+","); เครื่องหมายจุลภาค}} 10. ไฟถนน (20 คะแนน)
ถนนในเมืองหลวงของจังหวัดถูกข้ามไป เพื่อตรวจสอบการทำงานของไฟถนนแต่ละถนนใช้สตริงตัวเลขเพื่อระบุการทำงานของไฟถนนทั้งหมดบนถนน
สมมติว่าไฟถนนมีเพียงสามรัฐต่อไปนี้ (ระบุโดยตัวเลข 0, 1, 2 ตามลำดับและไฟถนนจะสอดคล้องกับหนึ่งในรัฐเท่านั้น):
0 ไฟถนนป้ายปิดอยู่
1 ไฟถนนเปิดอยู่
2 ระบุความล้มเหลวของไฟถนน
โปรดค้นหาจำนวนไฟถนนต่อเนื่องสูงสุดในสถานะเดียวกันบนถนนตามสายที่ป้อน หากจำนวนไฟถนนในทั้งสองรัฐเหมือนกันสถานะไฟถนนสายแรกจะถูกส่งกลับ
ป้อนสตริงของรัฐประกอบด้วยไฟถนนต่อเนื่องบนถนน สตริงมีตัวเลขเท่านั้นและสถานะของไฟถนนแต่ละลำเป็นหนึ่งใน 0, 1 และ 2 ตัวอย่างเช่น "1101" หมายถึง 4 ไฟถนนไฟถนนสายที่สามอยู่ในสถานะของนอกและอีก 3 อยู่ในสถานะของ ON
จำนวนสูงสุดของไฟถนนที่อยู่ในสถานะเดียวกันคือเอาต์พุต
สถานะของไฟถนนด้านบน;
ข้อกำหนด: เอาท์พุทครั้งแรกปริมาณจากนั้นส่งออกสถานะและใช้ช่วงเวลาของพื้นที่ระหว่างจำนวนเต็มทั้งสอง ตัวอย่างเช่นเอาต์พุต:
53 2
อินพุตตัวอย่าง
112200111
ตัวอย่างเอาต์พุต
3 1
แพ็คเกจ com.sheepmu.text; นำเข้า Java.util.Arrays; / * * @author sheepmu */คลาสสาธารณะ hwCompetition {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {String s = "112001110"; // คำถามประเภทนี้ต้องให้ความสนใจกับสถานการณ์เดียวกันทั้งหมดในตอนท้ายนั่นคือไม่มีความแตกต่างจากอีกครั้ง System.out.println ("inarr --->"+s); hwCompetition hw = hwcompetition ใหม่ (); สตริงผลลัพธ์ = hw.ludeng (s); System.out.println ("ผลลัพธ์คำถาม ---->"+ผลลัพธ์); } สตริงสาธารณะ ludeng (สตริง s) {// ลบเครื่องหมายจุลภาคในสตริงมิฉะนั้นเครื่องหมายจุลภาคจะเป็นค่าตัวห้อยของสตริง เมื่อเอาท์พุทให้เพิ่มถ่าน [] เป็น = s.toChararray (); int len = as.length; int maxc = 1; // int mubiaobindex = 0; // อย่าสร้างตัวแปรพิเศษ // int mubiOvalue = AS [0]; int bindex = 0; // ถ้าคุณต้องการส่งคืนตัวห้อยแรกที่ใหญ่ที่สุดติดต่อกันแล้ว 6 ในเวลานี้; หากคำถามมีข้อกำหนดนี้: จากนั้นตั้งค่าตัวแปรสองตัว: จำนวนครั้ง "ต่อส่วน" + ตัวห้อยแรกที่ปรากฏ ค่าถ่าน = เป็น [0]; // หากคำถามจำเป็นต้องส่งคืนค่าของส่วนความยาวสูงสุดนั่นคือ 1 ของสถานะของคำถามนี้สำหรับ (int i = 0; i <len-1;) {int count = 1; // แต่ละลูปด้านนอกจะตั้งค่าเป็น 1 และเริ่มนับ bindex ใหม่ = i; ค่า = เป็น [i]; สำหรับ (int j = i+1; j <len; j ++) {ถ้า (เป็น [i]! = เป็น [j]) {i = j; หยุดพัก; } else {i ++; // !!!!!!!!!!!!! หากไม่แตกต่างกันในภายหลัง; หากไม่เพิ่มประโยคนี้ลูปด้านนอกจะถูกดำเนินการตลอดเวลา นับ ++; }} if (count> maxc) {maxc = count; // MUBIAOBINDEX = BINDEX; // MUBIAVOLADUE = ค่า; System.out.println ("maxc --->"+maxc+"เริ่มต้นตัวห้อย ---->"+bindex+"สถานะ ---->"+ค่า); }} StringBuffer sb = new StringBuffer (); ส่งคืน sb.append (maxc+"") .append (ค่า) .toString (); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น