Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

กรองร้านอาหารตามอาหารมังสวิรัติ ราคา และระยะทางในภาษา C++


สมมติว่าเรามีร้านอาหารมากมายที่ร้านอาหาร[i]มี [idi, Ratingi, เป็นมิตรกับมังสวิรัติ, pricei, Distancei] เราต้องกรองร้านอาหารโดยใช้สามตัวกรอง

  • ตัวกรองที่เป็นมิตรกับวีแก้นจะเป็นจริง (หมายความว่าเราควรรวมเฉพาะร้านอาหารที่ตั้งค่าให้เหมาะกับวีแก้นเป็นจริงเท่านั้น) หรือเท็จ (หมายความว่าเราสามารถรวมร้านอาหารใดก็ได้)

  • ตัวกรอง maxPrice และตัวกรองระยะทางสูงสุด ซึ่งเป็นค่าสูงสุดสำหรับราคาและระยะทางของร้านอาหารที่เราควรพิจารณาตามลำดับ

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

ดังนั้นหากข้อมูลเข้าเหมือนร้านอาหาร −

[[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[ 5,1,1,15,1]], veganFriendly =1, maxPrice =50, maxDistance =10 จากนั้นผลลัพธ์จะเป็น [3,1,5] คำอธิบายจะเป็นดังนี้ −

ร้านอาหาร 1 [id=1, เรตติ้ง=4, วีแกนFriendly=1, ราคา=40, ระยะทาง=10]

ร้านอาหาร 2 [id=2, คะแนน=8, วีแก้นFriendly=0, ราคา=50, ระยะทาง=5]

ร้านอาหาร 3 [id=3, คะแนน=8, วีแก้นFriendly=1, ราคา=30, ระยะทาง=4]

ร้านอาหาร 4 [id=4, เรตติ้ง=10, วีแก้นFriendly=0, ราคา=10, ระยะทาง=3]

ร้านอาหาร 5 [id=5, คะแนน=1, วีแก้นFriendly=1, ราคา=15, ระยะทาง=1]

หลังจากกรองร้านอาหารด้วย veganFriendly =1 แล้ว maxPrice =50 และ maxDistance =10 เรามีร้านที่ 3 ร้านอาหาร 1 และร้านที่ 5 (เรียงตามลำดับการลดลง)

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดเมทริกซ์ที่เรียกว่า temp, n :=size of restaurants array

  • สำหรับฉันอยู่ในช่วง 0 ถึง n – 1

    • ถ้า vf =0 หรือ r[i, 2] =vf และ r[i, 3] <=mp และ r[i, 4] <=md แล้ว

      • ใส่ [r[i, 0], r[i, 1]] ลงในอุณหภูมิ

  • จัดเรียงร้านอาหารตามลำดับที่ลดลงตามการให้คะแนน

  • สร้างอาร์เรย์ที่เรียกว่า ret

  • สำหรับผมอยู่ในช่วง 0 ถึงขนาดของอุณหภูมิ

    • ใส่ temp[i, 0] ลงใน ret

  • รีเทิร์น

ตัวอย่าง (C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include ใช้เนมสเปซ std;void print_vector(vector v){ cout <<"["; for(int i =0; i a, vector  b){ if(b[1] !=a[1]) return a[ 1]> ข[1]; ส่งคืน a[0]> b[0]; } vectorfilterRestaurants(vector>&r, int vf, int mp, int md) { vector > ชั่วคราว; int n =r.size(); for(int i =0; i  ret; for(int i =0; i > v ={{1,4,1,40,10},{2,8,0,50,5},{3,8,1,30, 4},{4,10,0,10,3},{5,1,1,15,1}}; โซลูชัน ob; print_vector(ob.filterRestaurants(v, 1, 50, 10));}

อินพุต

<ก่อน>[[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3 ],[5,1,1,15,1]]15010

ผลลัพธ์

[3,1,5]