لم يكن لدي ما أفعله يوم الجمعة. استنادًا إلى المقالة السابقة حول تحليل نظرية خوارزمية التذاكر 12306 (إصدار Java) ، أجريت ممارسة ترميز Java للقراء للإشارة إلى (فيما يلي وصف بسيط للرمز ذي الصلة)
1. أدوات حجز التذاكر
1.1 تهيئة معلومات تذكرة سيارة القطار
/*** إنشاء معلومات التذاكر ** param train* @return*/public static list <Ticket> initticketList (Train Train) {list <Crate> result = new ArrayList <Ticket> () ؛ map <string ، integer> seatmap = train.getseattalnum () ؛ for (unter <string ، integer> under: tickettype = intpling.getKey () ؛ for (int i = 0 ؛ i <ticketsize ؛ i ++) {int salechannel = (int) (math.random () * 10) ٪ 8 ؛ تذكرة تذكرة = جديدة ticket () ؛ ticket.setsalechannel (salechannel) ؛ ticket.settickettype (tickettype) ؛ ticket.setguid (uuid.randomuuid (). tostring ()) ؛ ticket.setfromdate ( Train.getFromDate ()) ؛ ticket.setticketflag (commonutil.InticticketFlag (Train)) ؛ ticket.settrainno (train.gettrainno ()) ؛ result.add (ticket) ؛}} نتيجة؛}1.2 إنشاء شراء تذكرة الموقع (على سبيل المثال ، يمكن إجراء التحول الأول ، مثل المحطة الأولى 1 ، والمحطة الثانية "10" ، والمحطة الثانية يتم إرجاعها في النظام العشري)
/*** إنشاء* param i* param stationnum* @return*/public static string buidticket (int i ، int stationnum) {biginteger temp = new BigInteger ("0") Temp.Shiftright (1) .ToString () ؛}1.3 الإجراء الرئيسي لحجز التذاكر ، يتم حجز تذكرة واحدة فقط في وقت واحد (A = A | B)
/*** احصل على رقم القطار المقابل وفقًا لشروط المرشح* param ticketstr* param ticketlist* @param الشرط* @إرجاع*/ترتيب ثابت عام createRyRebyCondition (String TicketStr ، قائمة <Crate> قائمة التذاكر ، شرط الخريطة) BigInteger (ticket.getTicketFlag ()) ؛ // إذا كان يمكنك حجز التذاكر ، فستقوم بخصم المخزون لفترة طويلة && // (ticket.getSalechannel () == (ticket.getSalechannel () | 1)) إذا (Canticket (fromticket ، Toticket) && ticket.getTicketType (). متساوٍ (الحالة. order () ؛ temporder.setorderid (uuid.randomuuid () er.setFromDate (ticket.getFromDate ()) ؛ temporder.setsalechannel (ticket.getSalechannel ()) ؛ temporder.setticketguid (ticket.getguid ())
1.4 لتحديد ما إذا كنت تريد ختم ، a = ~ (~ a | b)
/*** حدد ما إذا كان يمكنك حجز التذاكر ** param fromticket* param toticket* @return*/private static boolean canticket (biginteger fromticket ، biginteger toticket) {return fromticket.equals (fromticket.not ().2. كيان الطلب (احتفظ بمعلومات الطلب اللازمة)
package com.train.ticket ؛/*** rettity retity*author guo_zhifeng **/Order public order {private string orderid ؛ private string ticketguid ؛ // bill idprivate string ticketflag ؛ // mark mark private string seattype ؛ // seat type type private string ؛ // date string private train ؛ // train train private int int int sale OrderId ؛} public void setorderid (string orderid) {this.orderid = orderid ؛} السلسلة العامة getTicketGuid () {return ticketguid ؛ {this.ticketflag = ticketflag ؛} السلسلة العامة geteAttype () {return seattype ؛} public void setSeatType (string seattype) {this.seattype = string ؛} getTrainno () {return trainno ؛} public void setTrainno (String Trainno) {this.trainno = trainno ؛} public int getalechannel () {return salechannel ؛} public void setSalechannel (int salechannel) {this.salechannel = salechannel ؛}}}3. كيان التذاكر (احتفظ بمعلومات التذاكر اللازمة)
package com.train.ticket ؛/*** كيان التذاكر*Author guo_zhifeng **/تذكرة الفئة العامة} getTrainno () {return trainno ؛} public void setTrainno (String Trainno) {this.trainno = trainno ؛} السلسلة العامة getTicketFlag () {return ticketflag ؛} public void settictflag (string micketflag) SetticketType (String tickettype) {this.tickettype = tickettype ؛} public int getSalechannel () {return salechannel ؛ {this.fromDate = fromDate ؛}}4. معلومات تهيئة القطار (المعلومات الرئيسية فقط)
package com.train.ticket ؛ import java.util.map ؛/*** معلومات حول قطار*Author guo_zhifeng **/قطار الفئة العامة {private string trainno ؛ // رقم القطار الخاص int stationnum ؛ // عدد المحطات الخاصة بـ stations <string ، integer> seattotalnum ؛ number من المقعدات العامة المختلفة ؛ void setFromDate (String fromDate) {this.fromDate = fromDate ؛} السلسلة العامة getTrainno () {return trainno ؛} public void setTrainno (String trainno) {this.trainno = trainno ؛ stationnum ؛} الخريطة العامة <string ، integer> geteattotalnum () {return seattotalnum ؛} public void setSeatTotalNum (map <string ، integer> seattotalnum) {this.seattotalnum = seattotalnum ؛}}}}} 5. البرنامج الرئيسي
5.1 تهيئة سيارة قطار
5.2 وفقًا لشكل عمليات شراء التذاكر في الموقع ، فإن التعظيم هو AB BC CD De EF ، إلخ.
5.3 الإخراج المستهلكة للوقت
package com.train.main ؛ import java.io.file ؛ import java.math.bigdecimal ؛ import java.math.biginteger ؛ import java.util.arrayList ؛ com.train.ticket.ticket ؛ import com.train.ticket.train ؛ import com.train.util.Commonutil ؛ maintest class public {public static void main (string [] args) {train train = new Train () ؛ train.settrainno ("sa") ؛ SEATMAP = NEW HASHMAP <string ، integer> () ؛ SEATMAP.PUT ("مقعد الأعمال" ،) ؛ SEATMAP.PUT ("الدرجة الأولى" ،) ؛ seatmap.put ("الدرجة الثانية" ،) CommonUtil.InticketList (Train) ؛ String filename = "d: //result.txt" ؛ file f = new file (filename) ؛ if (f.exists ()) f.delete () ؛ long startTime = system.currentTimeMillis () ؛ // int i = ؛ // for (تذكرة التذكرة: قائمة التذاكر) {// commonutil.appendmethoda (اسم fileName ، // i + "|| long begintime = system.currentTimeMillis () ؛ قائمة <Trome> orderResult = new ArrayList <Rude> () ؛ لـ (int j = ؛ j <Train.getStationNum () - ؛ J ++) {String TicketStr = commonutil.buidticket (j) ؛ // string ticketstr = commonutil.buidticket (، train.getStationNum ()) ؛؛ // system.exit () Train) ؛ OrderResult.Addall (templistorder) ؛} long endtime = system.currentTimeMillis () ؛ system.out.println ("الانتهاء من الحجز") ؛ // int m = ؛ + commonutil.tojson (ticket) + "،" ؛ // // system.out.println (temp) ؛ // commonutil.appendMethoda (filename ، temp ، true) ؛ // m ++ ؛ //} // int k = ؛ for order: orderresult) {// string temp = order.getorderid () + order.getSalechannel () // + "||" + order.getFromDate () // + "||" + order.getSeattype () // + "||" + order.getTicketGuid () // + "||" + order.gettrainno () // + "||" + order.getTicketFlag () // + "||" + New BigInteger (order.getTicketFlag ()). ToString () // + "||" + k ؛ // commonutil.appendmethoda (اسم الملف ، temp ، true) ؛ // k ++ ؛ //} eedtime long = system.currentTimeMillis () ؛ system.out.println ("إنشاء ترتيب" + orderresult.size () + " عدد المستندات الواحدة في الثانية (الطلب حسب التذكرة) " + جديد BigDecimal (OrderResult.Size ()). اضرب (جديد BigDecimal ()6. نتائج التشغيل
ما ورد أعلاه هو خوارزمية التذاكر في Code Code Code 12306 التي قدمها لك المحرر (II). آمل أن يكون ذلك مفيدًا للجميع!