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

จัดเรียงตัวเลข N ตัวแรกเพื่อให้อยู่ที่ระยะ K ใน C++


เราได้รับตัวแปรจำนวนเต็ม สมมุติว่า 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