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

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

โจทย์  " MJEHURIC "

     Goran มีท่อนไม้ 5 ชิ้นเรียงกันตามลำดับ ท่อนไม้แต่ละชิ้นจะมีตัวเลขที่มีค่าจาก 1-5 สลักอยู่ด้านบน ดังนั้น ค่าของตัวเลขที่กำกับอยู่ด้านบนของท่อนไม้ในแต่ละชิ้นจะปรากฏแค่เพียงครั้งเดียวเท่านั้น Goran ต้องการที่จะเรียงลำดับท่อนไม้แต่ละชิ้นให้มีค่า 1 2 3 4 5 ตามลำดับ โดยกระทำด้วยวิธีการดังนี้
 1.   ถ้าตัวเลขบนไม้ท่อนแรกมีค่ามากกว่าตัวเลขบนไม้ท่อนที่สอง   ให้สลับที่กัน
 2.   ถ้าตัวเลขบนไม้ท่อนที่สองมีค่ามากกว่าตัวเลขบนไม้ท่อนที่สาม   ให้สลับที่กัน
 3.   ถ้าตัวเลขบนไม้ท่อนที่สามมีค่ามากกว่าตัวเลขบนไม้ท่อนที่สี่   ให้สลับที่กัน
 4.   ถ้าตัวเลขบนไม้ท่อนที่สี่มีค่ามากกว่าตัวเลขบนไม้ท่อนที่ห้า   ให้สลับที่กัน
 5.   ถ้าท่อนไม้ทั้งหมดยังไม่เรียงกันตามลำดับ 1 2 3 4 5   ให้กลับไปทำขั้นที่ 1 ใหม่

งานของคุณ
     จงเขียนโปรแกรมเพื่อรับค่าของตัวเลขบนท่อนไม้ตามลำดับในตอนเริ่มต้น และแสดงผลค่าของตัวเลขบนท่อนไม้ตามลำดับที่ได้หลังจากการสลับที่ในแต่ละครั้ง

ข้อมูลนำเข้า
     ในบรรทัดแรก ประกอบด้วยค่าของตัวเลขบนท่อนไม้ทั้ง 5 ท่อน ตามลำดับ ซึ่งแยกกันโดยใช้ช่องว่าง 1 ช่อง ตัวเลขทั้งหมดจะต้องมีค่าจาก 1 ถึง 5 และไม่มีตัวเลขใดมีค่าซ้ำกัน ค่าของตัวเลขบนท่อนไม้ในตอนเริ่มต้น จะต้องไม่ใช่ 1 2 3 4 และ 5 ตามลำดับ

ข้อมูลส่งออก
     หลังจากท่อนไม้ 2 ท่อนใด ๆ ถูกสลับที่กัน   ให้แสดงผลค่าของตัวเลขบนท่อนไม้เหล่านั้นซึ่งเรียงกันตามลำดับ ลงบนบรรทัดเดียวกัน โดยใช้ช่องว่างแยกตัวเลขแต่ละตัวออกจากกัน

ที่มา:  COCI 2008/2009, Contest #4 – January 17, 2009

ตัวอย่างข้อมูลนำเข้า                  ตัวอย่างข้อมูลส่งออก
 2 1 5 3 4                  1 2 5 3 4
                  1 2 3 5 4
                  1 2 3 4 5

 2 3 4 5 1                  2 3 4 1 5
                  2 3 1 4 5
                  2 1 3 4 5
                  1 2 3 4 5

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

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


  • รับข้อมูลเข้ามาหนึ่งชุดเป็นตัวเลข  1 - 5  มีช่องว่างเป็นตัวเเบ่ง ต้องไม่เรียงกัน เเละต้องไม่ซ้ำกัน 
  • ทำการสลับที่ตามเงื่อนไขที่โจทย์กำหนด 

  •       1. ถ้าตัวเลขบนไม้ท่อนแรกมีค่ามากกว่าตัวเลขบนไม้ท่อนที่สอง   ให้สลับที่กัน
          2. ถ้าตัวเลขบนไม้ท่อนที่สองมีค่ามากกว่าตัวเลขบนไม้ท่อนที่สาม   ให้สลับที่กัน
          3. ถ้าตัวเลขบนไม้ท่อนที่สามมีค่ามากกว่าตัวเลขบนไม้ท่อนที่สี่   ให้สลับที่กัน
          4. ถ้าตัวเลขบนไม้ท่อนที่สี่มีค่ามากกว่าตัวเลขบนไม้ท่อนที่ห้า   ให้สลับที่กัน
          5. ถ้าท่อนไม้ทั้งหมดยังไม่เรียงกันตามลำดับ 1 2 3 4 5   ให้กลับไปทำขั้นที่ 1 ใหม่ 

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


  • รับข้อมูลเข้ามาเเล้วทำการเเยกข้อมูลออกจากกันเเล้วก็เก็บไว้ใน List
  • ตรวจสอบว่า ข้อมูลเรียงเเล้วหรือยัง เเละมีตัวซ้ำหรือไม่
  • สลับข้อมูลตามที่โจทย์กำหนด

  • Code Python 

                                                                                                                                                                                                                              def NewData (Input) :
                  ListData = []
                  for i in range(len(Input)) :
                      if Input[i] == "  "  :
                          ListData.append(Input[i-1])
                  ListData.append(Input[len(Input)-1])
                  return ListData
    
              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 is you double")
                              return False 
                  return True
    
              def  Checkdata (Input) :
                  for i in range(len(Input)-1) :
                      if Input[i] > Input[i+1] :
                          return True
                  return False 
    
              def Sortdata(Input) :
                  Save = 0
                  for i in range(len(Input)-1) :
                      if Input[i] > Input[i+1] :
                          Save = Input[i]
                          Input[i] = Input[i+1]
                          Input[i+1] = Save
                          print Input
                          if Checkdata(Input) == True :
                              Sortdata(Input)
                  return Input
    
              while True :
                  Input = raw_input("Input data is : ")
                  if len(Input) == 9 and Checkdouble(NewData(Input)) :
                          if Checkdata(NewData(Input)) == True :
                              Sortdata(NewData(Input))
                          else :
                              print ("Check new data no input 1 2 3 4 5")
                              print("Error input check now")
                  else :
                      print("Error input check now")                                                                                                                                                                                            

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

                                                                                                                                                                                                                              Input data is : 12345
              Error input check now
    
              Input data is : 123456
              Error input check now
    
              Input data is : 1 2 3 4 5
              Check new data no input 1 2 3 4 5
              Error input check now
    
              Input data is : 1 2 1 3 4
              Check new data is you double
              Error input check now
    
              Input data is : 2 1 5 3 4
              ['1', '2', '5', '3', '4']
              ['1', '2', '3', '5', '4']
              ['1', '2', '3', '4', '5']
    
              Input data is : 2 3 4 5 1
              ['2', '3', '4', '1', '5']
              ['2', '3', '1', '4', '5']
              ['2', '1', '3', '4', '5']
              ['1', '2', '3', '4', '5']                                                                                                                                                                                                                                                                                                                  

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

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