使用 C++ 將陣列透過給定操作簡化為單個元素


給定一個整數變數 Number 作為輸入。讓我們考慮一個包含從 1 到 Number 範圍內元素的有序陣列。如果我們對陣列執行一個操作,使得在每一步中都刪除奇數位置的元素。那麼目標是執行此操作 N 次,直到只剩下一個元素。最後列印該元素。

注意:元素的位置是指陣列中索引為 0 的元素位於第 1 個位置,依此類推。

陣列元素數量的測試用例

輸入 Number=1,輸出 = 1

輸入 Number=2,輸出 = 2

輸入 Number=3,輸出 = 2

輸入 Number=4,輸出 = 4

輸入 Number=5,輸出 = 4

輸入 Number=6,輸出 = 4

輸入 Number=7,輸出 = 4

......

輸入 Number=12,輸出 = 8

輸入 Number=20,輸出 = 16

根據以上觀察,對於 2i 到 2i+1-1 之間的數字範圍,輸出將為 2i

示例

輸入 - Number=7

輸出 - 簡化操作後的單個元素為:4

解釋 - 第一個元素位於位置 1,依此類推。

陣列將為 [ 1 2 3 4 5 6 7 ]

第一次操作後:[ 2 4 6 ]

第二次操作後:[ 4 ]

輸入 - Number=18

輸出 - 簡化操作後的單個元素為:4

解釋 - 第一個元素位於位置 1,依此類推。

陣列將為 [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ]

第一次操作後:[ 2 4 6 8 10 12 14 16 18]

第二次操作後:[ 4 8 12 16 ]

第三次操作後:[ 8 16 ]

第四次操作後 [ 16 ]

下面程式中使用的方法如下

在這種方法中,我們將使用 while 迴圈根據上述公式計算最終結果。將初始值設為 2,並遍歷直到 2*result <= 輸入數字,並在每次迭代中將值加倍。

  • 獲取輸入變數 Number

  • 函式 getsingleElement(long num) 獲取輸入數字並根據上述公式列印結果。

  • 宣告一個變數 result。

  • 將 result 初始化為 2。

  • 使用 while 迴圈遍歷直到 result*2<=num。

  • 在迴圈內將 result 加倍。

  • 一旦 while 迴圈結束,我們將得到所需的值。

  • 返回 result。

  • 在 main 函式內列印結果。

示例

#include<bits/stdc++.h>
using namespace std;
long getsingleElement(long num){
   long result;
   result=2;
   while(result*2 <= num){
      result=result*2;
   }
   return result;
}
int main(){
   int Number = 20;
   cout<<"The single element after reduction operation is : "<<getsingleElement(Number) ;
   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出

The single element after reduction operation is : 16

更新於:2021年11月3日

198 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告