เราได้รับตัวแปรจำนวนเต็ม สมมุติว่า N และ K ภารกิจคือการคำนวณการเรียงสับเปลี่ยนของ N ก่อน แล้วจึงจัดเรียงการเปลี่ยนแปลงใหม่ในลักษณะที่ระยะห่าง K จากทุกองค์ประกอบ
ให้เราดูสถานการณ์อินพุตเอาต์พุตที่หลากหลายสำหรับสิ่งนี้ -
ป้อนข้อมูล − int n =20, int k =2
ผลผลิต − การจัดเรียงตัวเลข N ตัวแรกเพื่อให้อยู่ในระยะ K คือ 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18
คำอธิบาย − เราได้รับตัวแปรจำนวนเต็ม 'N' เช่น 20 และ 'K' เช่น 2 ตอนนี้ เราจะคำนวณการเปลี่ยนแปลงของ 'N' เช่น 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 , 12, 13, 14, 15, 16, 17, 18. 19, 20. ตอนนี้ เราจะจัดองค์ประกอบในลักษณะที่องค์ประกอบทั้งหมดจะมีระยะห่าง 'k' จากทุกองค์ประกอบ
ป้อนข้อมูล − int n =10, int k =3
ผลผลิต − การจัดเรียงตัวเลข N ตัวแรกเพื่อให้อยู่ในระยะ K คือ:เป็นไปไม่ได้
คำอธิบาย − เราได้รับตัวแปรจำนวนเต็ม 'N' เช่น 10 และ 'K' เช่น 3 ตอนนี้เราจะคำนวณการเปลี่ยนแปลงของ 'N' เช่น 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ตอนนี้ เราจะจัดเรียงองค์ประกอบในลักษณะที่องค์ประกอบทั้งหมดจะอยู่ห่างจากทุกองค์ประกอบ 'k' แต่เป็นไปไม่ได้ด้วยค่าอินพุตที่กำหนด
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนองค์ประกอบประเภทจำนวนเต็มเช่น 'N' และ 'K'
-
การเรียกใช้ฟังก์ชัน การจัดเรียงใหม่ (int n, int k) โดยส่ง N และ K ไปยังฟังก์ชันเป็นพารามิเตอร์
-
ภายในฟังก์ชัน การจัดเรียงใหม่ (int n, int k)
-
ประกาศตัวแปรจำนวนเต็มเป็น temp และตั้งค่าด้วย n % (2 * k)
-
ประกาศอาร์เรย์ประเภทจำนวนเต็มเป็น ptr ขนาด n + 1 เช่น prt[n+1].
-
ตรวจสอบว่า k =0 แล้วเริ่มวนซ้ำ FOR จาก i ถึง 1 จนถึง i น้อยกว่าขนาดและเพิ่ม i ขึ้น 1 แล้วพิมพ์ i
-
ตรวจสอบว่าอุณหภูมิไม่เท่ากับ 0 แล้วพิมพ์เป็นไปไม่ได้
-
เริ่มวนรอบ FOR จาก i ถึง 1 จนถึง i น้อยกว่า N และตั้งค่า ptr[i] ด้วย i.
-
เริ่มวนซ้ำ FOR จาก i ถึง 1 จนถึง i น้อยกว่า n และตั้งค่า i ด้วย i + 2 * k ภายในลูป เริ่มลูปอื่น FOR จาก j ถึง 1 ถึง j น้อยกว่า k และเพิ่ม j ขึ้น 1 ภายในลูป เรียกเมธอด swa โดยส่ง ptr[i + j -1] และ ptr[k + i + j - 1] เป็นพารามิเตอร์
-
เริ่มวนรอบ FOR จาก i ถึง 1 tll i น้อยกว่า N และเพิ่ม i ขึ้น 1
-
พิมพ์ prt[i].
-
-
พิมพ์ผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; void Rearrangement(int n, int k){ int temp = n % (2 * k); int ptr[n + 1]; if(k == 0){ for(int i = 1; i <= n; i++){ cout << i << " "; } return; } if(temp != 0){ cout<<"Not Possible"; return; } for(int i = 1; i <= n; i++){ ptr[i] = i; } for(int i = 1; i <= n; i += 2 * k){ for(int j = 1; j <= k; j++){ swap(ptr[i + j - 1], ptr[k + i + j - 1]); } } for(int i = 1; i <= n; i++){ cout << ptr[i] << " "; } } int main(){ int n = 20; int k = 2; cout<<"Rearrangement of first N numbers to make them at K distance is: "; Rearrangement(n, k); return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้
Rearrangement of first N numbers to make them at K distance is: 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18