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