使用 C++ 中的给定操作将数组缩减为单个元素
给定一个整数变量Number作为输入。让我们考虑一个按排序顺序包含1到Number范围内的元素的数组。如果我们对一个数组执行一个操作,使得在每一步都删除奇数位置的元素。然后目标是执行此操作N次,直到只剩下一个元素。最后打印该元素。
注意-:元素的定位使得索引0处的数组位于第一个位置,依此类推。
数组中元素数的测试用例
输入数=1,输出=1
输入数=2,输出=2
输入数=3,输出=2
输入数=4,输出=4
输入数=5,输出=4
输入数=6,输出=4
输入数=7,输出=4
......
输入数=12,输出数=8
输入数=20,输出=16
根据上述观察,对于2i 到2i+1-1之间的数字范围,输出将为2i。
例子
输入 -Number=7
输出 -减少操作后的单个元素是:4
说明 -第一个元素位于位置1,依此类推。
该数组将是[1234567]
第一次操作后:[246]
第二次手术后:[4]
输入 -数字=18
输出 -减少操作后的单个元素是:4
说明-第一个元素位于位置1,依此类推。
该数组将是[123456789101112131415161718]
第一次操作后:[24681012141618]
第二次手术后:[281216]
第三次手术后:[816]
第四次手术后[16]
下面程序中使用的方法如下
在这种方法中,我们将使用while循环根据上述公式计算最终结果。取初始值为2并遍历直到2*result<=inputnumber并在每次迭代时将值加倍。
取输入变量Number
函数getsingleElement(longnum)获取输入数字并根据上述公式打印结果。
取一个可变的结果。
用2初始化结果。
使用while循环遍历直到result*2<=num。
双重结果里面会。
while循环一结束,我们就会得到想要的值。
返回结果。
在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<<"归约运算后的单个元素为: "<<getsingleElement(Number) ; return 0; }输出结果
如果我们运行上面的代码,它将生成以下输出
归约运算后的单个元素为: 16