C++程式,用於將陣列中所有x的倍數元素按升序重新排列
給定一個整數型別陣列‘int arr[]’和一個整數型別變數‘x’。任務是重新排列陣列的所有元素,使其都可被給定的整數‘x’整除,並且排列順序為升序。
讓我們看看這個程式的各種輸入輸出場景:
輸入 - int arr[] = {4,24, 3, 5, 7, 22, 12, 10}, int x = 2
輸出 - 將陣列中所有2的倍數元素按升序重新排列的結果為:4 10 12 22 24 3 5 7
解釋 - 我們給定一個包含值{4,24, 3, 5, 7, 22, 12, 10}的整數型別陣列和值為2的x。首先,我們將檢查陣列中所有可以被2整除的元素,即4, 24, 22, 12, 10。然後,我們將這些元素按升序排列,即4, 10, 12, 22, 24,剩餘元素保持原有相對順序,最終輸出為4 10 12 22 24 3 5 7。
輸入 - int arr[] = {4,24, 3, 5, 7, 22, 12, 10}, int x = 3
輸出 - 將陣列中所有3的倍數元素按升序重新排列的結果為:3 12 24 4 5 7 22 10
解釋 - 我們給定一個包含值{4,24, 3, 5, 7, 22, 12, 10}的整數型別陣列和值為3的x。首先,我們將檢查陣列中所有可以被3整除的元素,即3, 24, 12。然後,我們將這些元素按升序排列,即3, 12, 24,剩餘元素保持原有相對順序,最終輸出為3 12 24 4 5 7 22 10。
下面程式中使用的方案如下:
宣告一個整數型別陣列。計算陣列的大小並將其儲存在名為size的變數中。宣告一個整數型別變數'x',根據它需要重新排列陣列。
將資料傳遞給函式Rearrange_Elements(arr, size, x)
在函式Rearrange_Elements(arr, size, x)內部:
建立一個名為vec的變數,其型別為vector,儲存整數型別值。
從i=0開始迴圈,直到i小於size。在迴圈內,檢查IF arr[i] % x = 0,如果是,則將arr[i]推入vec。
使用C++ STL sort方法對陣列進行排序,我們將begin()和end()作為引數傳遞給函式。
從i=0開始迴圈,直到i小於size。檢查IF arr[i] % x = 0,如果是,則將arr[i]設定為vec[j++]。
使用for迴圈列印陣列,遍歷陣列從第一個元素到最後一個元素。
示例
#include <bits/stdc++.h> using namespace std; void Rearrange_Elements(int arr[], int size, int x){ vector<int> vec; int j = 0; for(int i = 0; i < size; i++){ if(arr[i] % x == 0){ vec.push_back(arr[i]); } } sort(vec.begin(), vec.end()); for (int i = 0; i < size; i++){ if(arr[i] % x == 0){ arr[i] = vec[j++]; } } cout<<"Rearrangement of all elements of array which are multiples of x "<<x<<" in decreasing order is: "; for(int i = 0; i < size; i++){ cout << arr[i] << " "; } } int main(){ int arr[] = {4,24, 3, 5, 7, 22, 12, 10}; int x = 2; int size = sizeof(arr) / sizeof(arr[0]); Rearrange_Elements(arr, size, x); return 0; }
輸出
如果我們執行以上程式碼,它將生成以下輸出
Rearrangement of all elements of array which are multiples of x 2 in decreasing order is: 4 10 3 5 7 12 22 24