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

โปรแกรม C ++ เพื่อค้นหาการเรียงสับเปลี่ยนซึ่งผลรวมของการเรียงลำดับองค์ประกอบที่อยู่ติดกันนั้นเหมือนกับอาร์เรย์ที่กำหนด


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n ฟังก์ชัน F(p) คืออาร์เรย์ที่จัดเรียงของผลรวมขององค์ประกอบที่อยู่ติดกันใน p ดังนั้น F(p) =sort([p1 + p2, p2 + p3, ... pn-1 + pn]) เรามีการเรียงสับเปลี่ยนที่แสดงใน A เราต้องหาการเปลี่ยนแปลงที่แตกต่างกันของ A โดยที่ F(A) เหมือนกัน

ดังนั้น หากอินพุตเป็น A =[2, 1, 6, 5, 4, 3] ผลลัพธ์จะเป็น [1, 2, 5, 6, 3, 4] เพราะ F(A)=sort( [2+1, 1+6, 6+5, 5+4, 4+3]) =เรียงลำดับ([3, 7, 11, 9, 7]) =[3,7,7,9,11] และ sort([1+2, 2+5, 5+6, 6+3, 3+4]) =sort([3, 7, 11, 9, 7]) =[3, 7, 7, 9, 11]. (อาจมีคำตอบอื่นๆ ด้วยเช่นกัน)

ขั้นตอน

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

n := size of A
for initialize i := n - 1, when i >= 0, update (decrease i by 1), do:
   print A[i]

ตัวอย่าง

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

#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A) {
   int n = A.size();
   for (int i = n - 1; i >= 0; i--)
      cout << A[i] << ", ";
}
int main() {
   vector<int> A = { 2, 1, 6, 5, 4, 3 };
   solve(A);
}

อินพุต

{ 2, 1, 6, 5, 4, 3 }

ผลลัพธ์

3, 4, 5, 6, 1, 2,