使用 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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告