คำชี้แจงปัญหา
กำหนดอาร์เรย์ขององค์ประกอบ N และจำนวนเต็ม K อนุญาตให้ดำเนินการต่อไปนี้กี่ครั้งก็ได้ในอาร์เรย์ที่กำหนด -
-
ใส่ K th ที่ส่วนท้ายของอาร์เรย์และลบองค์ประกอบแรกของอาร์เรย์
ภารกิจคือการค้นหาจำนวนการเคลื่อนไหวขั้นต่ำที่จำเป็นในการทำให้องค์ประกอบทั้งหมดของอาร์เรย์เท่ากัน พิมพ์ -1 ถ้าทำไม่ได้
หาก arr[] ={1, 2, 3, 4, 5, 6} และ k =6 จำเป็นต้องมีการเคลื่อนไหวขั้นต่ำ 5 ครั้ง:Move-1:{2, 3, 4, 5, 6, 6}Move- 2:{3, 4, 5, 6, 6, 6}ย้าย-3:{4, 5, 6, 6, 6, 6}ย้าย-4:{5, 6, 6, 6, 6, 6}ย้าย -5:{6, 6, 6, 6, 6, 6}
อัลกอริทึม
<ก่อน>1. ขั้นแรก ให้คัดลอก a[k] ต่อท้าย จากนั้นให้ a[k+1] เป็นต้น2 เพื่อให้แน่ใจว่าเราคัดลอกเฉพาะองค์ประกอบที่เท่ากัน องค์ประกอบทั้งหมดในช่วง K ถึง N ควรเท่ากัน เราจำเป็นต้องลบองค์ประกอบทั้งหมดในช่วง 1 ถึง K ที่ไม่เท่ากับ a[k]3 ใช้การดำเนินการต่อไปจนกว่าเราจะถึงเทอมขวาสุดในช่วง 1 ถึง K ที่ไม่เท่ากับ a[k]ตัวอย่าง
#include#define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) โดยใช้เนมสเปซ std;int getMinMoves(int *arr, int n, int k){ int i; สำหรับ (i =k - 1; i =0; --i) { if (arr[i] !=arr[k - 1]) { return i + 1; } } คืนค่า 0;}int main(){ int arr[] ={1, 2, 3, 4, 5, 6}; int k =6; cout <<"ต้องมีการเคลื่อนไหวขั้นต่ำ =" < ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
ย้ายขั้นต่ำที่ต้องการ =5