วันจันทร์ที่ 24 สิงหาคม พ.ศ. 2558

ฝึกการเเก้โจทย์ด้วย Python โจทย์ "ABC..."

โจทย์ "ABC..."

     กำหนดจำนวนเต็มบวก 3 จำนวน คือ A B และ C ซึ่งค่าที่กำหนดให้ทั้งสามตัวอาจจะไม่ได้เรียงลำดับไว้ให้ เพียงแต่เราทราบเป็นที่แน่นอนว่า A มีค่าน้อยกว่า B ส่วน B มีค่าน้อยกว่า C 

โจทย์
     จงเรียงตัวเลขทั้งสามตัวตามลำดับที่กำหนดมาให้

ข้อมูลนำเข้า
     บรรทัดแรกประกอบด้วยตัวเลข 3 ตัว คือ A B และ C ซึ่งอาจจะไม่ได้เรียงลำดับไว้ โดยที่ตัวเลขทั้ง 3 ตัวเป็นตัวเลขจำนวนเต็มบวกที่มีค่าไม่เกิน 100
     บรรทัดที่สองประกอบด้วยตัวอักษรภาษาอังกฤษ 3 ตัว คือ A B และ C โดยที่ไม่มีเว้นวรรคคั่นระหว่างตัวอักษรทั้งสาม ซึ่งแสดงถึงลำดับที่โจทย์ต้องการ

ข้อมูลส่งออก
     มีทั้งหมด 1 บรรทัด แสดงตัวเลขทั้งหมดเว้นช่องว่างระหว่างตัวเลข 1 ช่อง และเรียงลำดับตามที่โจทย์ต้องการ 

ที่มา: Croatian Open Competition in Informatics
contest 2 – November 25, 2006
ตัวอย่างข้อมูลนำเข้า           ตัวอย่างข้อมูลส่งออก
1 5 3
ABC           1 3 5
6 4 2
CAB           6 2 4

ความช่วยเหลือ: ไม่มีคำใบ้สำหรับปัญหานี้
ที่มาของโจทย์www.programming.in.th

วิเคราะห์โจทย์ 

  • รับค่าข้อมูลจำนวน 2 ค่า คือค่า ตัวเลข เเละค่า ABC... 
  • ทำการเรียงข้อมูลตาม ABC... ซึ่ง A < B < C < D .... < Z

เเนวคิดในการเเก้โจทย์ 

  • สร้าง Function 4 ขุด มีหน้าที่ในการ ตรวจสอบข้อมูลว่ามีขนาดเท่ากันหรือไม่ มีตัวซ้ำหรือไม่ เเปลงข้อมูลใส่ใน List เเละ หาตำเเหน่งของข้อมูล 

Code Python 

 
    def strtodata(Input) :
        List = []
        Save = ""
        for i in range(len(Input)):
            if Input[i] == " " : 
                List.append(Save)
                Save = "" 
            else :
                Save = Save+Input[i]
        List.append(Save)
        List.sort()
        return(List)
    
    def Checkdouble(Input) :
        for i in range(len(Input)):
            for a in range(i+1,len(Input)):
                if Input[i] == Input[a] :
                    print("Check new data you double\n")
                    return False
        return True

    def Checkdata(InputA,InputB) :
        Save = 1
        for i in range(len(InputA)) :
            if InputA[i] == " " :
                Save = Save + 1
        if Save == len(InputB) :
            return True
        else :
            print("Data error check input you\n")
            return False

    def ABC (abc,InputA):
         for i in range(len(InputA)):
            if abc == InputA[i] :
                return i

    while True :
        InputA = raw_input("Input data number : ")
        InputB = raw_input("Input data ACB... : ")
        if Checkdata(InputA,InputB) == True and Checkdouble(strtodata(InputA)) == True and Checkdouble(InputB) == True :
            Listnew = []
            ListA = strtodata(InputA)
            Save =""
            for i in range(len(InputB)) :
                Listnew.append(InputB[i])
                Listnew.sort()

            for a in range(len(InputB)):
                Save = Save+str(ListA[ABC(InputB[a],Listnew)])+" "
            print("Output is : "+Save+"\n")    

ผลลัพธ์ที่ได้... 


         Input data number : 1 5 3
               Input data ACB... : ABC
               Output is : 1 3 5 

               Input data number : 6 4 2
               Input data ACB... : CAB
               Output is : 6 2 4 

               Input data number : 1 4 7 8 5 2 3 6 9
               Input data ACB... : ABCDEFGHI
               Output is : 1 2 3 4 5 6 7 8 9 

               Input data number : 1 4 7 2 5 8 3 6 9
               Input data ACB... : IHGFEDCBA
               Output is : 9 8 7 6 5 4 3 2 1 

               Input data number : 1 5 9 7 3 6 4 8 2
               Input data ACB... : BACDEFGIH
               Output is : 2 1 3 4 5 6 7 9 8 

               Input data number : 1 2 3 1
               Input data ACB... : ABCD
               Check new data you double

               Input data number : 1 2 3 4
               Input data ACB... : AABC
               Check new data you double       
           

ไม่มีความคิดเห็น:

แสดงความคิดเห็น