使用 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