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

องค์ประกอบบวกที่ตำแหน่งคู่และค่าลบที่ตำแหน่งคี่ (ไม่รักษาลำดับสัมพัทธ์) ใน C++


ในปัญหานี้ เราได้รับอาร์เรย์และงานของเราคือการแปลงอาร์เรย์เพื่อให้จำนวนบวกทั้งหมดอยู่ที่ตำแหน่งดัชนีคู่ และจำนวนลบทั้งหมดอยู่ที่ตำแหน่งดัชนีคี่

ค่าบวกและค่าลบอาจมีจำนวนไม่เท่ากัน ในกรณีนี้ เราจะไม่ย้ายค่าเพิ่มเติม

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล − {3, 5, -1, 19, -7, -2}

ผลผลิต − {3, -1, 5, -7, 19, -2}

เพื่อแก้ปัญหานี้ เราจะต้องค้นหาองค์ประกอบที่ไม่เป็นระเบียบในอาร์เรย์ มีวิธีอื่นในการค้นหาสิ่งนี้ได้อีกวิธีหนึ่ง เราจะพูดถึงสองวิธีในที่นี้

วิธีที่ 1

วิธีนี้จะเพียงแค่สำรวจอาร์เรย์และค้นหาการเกิดขึ้นครั้งแรกขององค์ประกอบที่ไม่อยู่ในสถานที่นั้น (เช่น ค่าบวกไม่เท่ากัน และค่าลบไม่ตรงกัน) แล้วสลับไปมา เราจะดำเนินการนี้จนกว่าอาร์เรย์ทั้งหมดจะถูกข้ามผ่าน

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา

#include<iostream>
using namespace std;
void swapElements(int* a, int i , int j){
   int temp = a[i];
   a[i] = a[j];
   a[j] = temp;
   return ;
}
void printArray(int* a, int n){
   for(int i = 0; i<n; i++)
   cout<<a[i]<<"\t";
   cout<<endl;
   return ;
}
void generateOrderedArray(int arr[], int n){
   for(int i = 0; i <n; i++){
      if(arr[i] >= 0 && i % 2 == 1){
         for(int j = i + 1; j <n; j++){
            if(arr[j] < 0 && j % 2 == 0){
               swapElements(arr, i, j);
               break ;
            }
         }
      }
      else if(arr[i] < 0 && i % 2 == 0){
         for(int j = i + 1; j <n; j++){
            if(arr[j] >= 0 && j % 2 == 1){
               swapElements(arr, i, j);
               break;
            }
         }
      }
   }
   printArray(arr, n);
}
int main(){
   int arr[] = { 1, -3, 5, 6, -3, 6, 7, -4, 9, 10 };
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"Inital Array is : ";
   printArray(arr, n);
   cout<<"Array with positive numbers at even index and negative numbers at odd index :";
   generateOrderedArray(arr,n);
   return 0;
}

ผลลัพธ์

Inital Array is : 3 5 -1 19 -7 -2
Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2

วิธีที่ 2

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

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา

#include <iostream>
using namespace std;
void swapElements(int* a, int i , int j){
   int temp = a[i];
   a[i] = a[j];
   a[j] = temp;
   return ;
}
void printArray(int *a, int n){
   for (int i = 0; i <n; i++)
   cout<<a[i]<<"\t";
   cout<<endl;
}
void generateOrderedArray(int a[], int size){
   int positive = 0, negative = 1;
   while (1) {
      while (positive < size && a[positive] >= 0)
      positive += 2;
      while (negative <size && a[negative] <= 0)
      negative += 2;
      if (positive < size && negative < size)
         swapElements(a, positive, negative);
      else
         break;
   }
}
int main(){
   int arr[] = { 3, 5, -1, 19, -7, -2 };
   int n = (sizeof(arr) / sizeof(arr[0]));
   cout<<"Inital Array is : ";
   printArray(arr, n);
   cout<<"Array with positive numbers at even index and negative numbers at odd index : ";
   generateOrderedArray(arr, n);
   printArray(arr, n);
   return 0;
}

ผลลัพธ์

Inital Array is : 3 5 -1 19 -7 -2
Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2