gpt4 book ai didi

c - 挑出奇数

转载 作者:行者123 更新时间:2023-11-30 20:16:21 27 4
gpt4 key购买 nike

我想编写一个方法,返回最后一个尚未删除的可用奇数位置。例如

<小时/>

假设输入到函数的数字是5那么我们可以编号如下1,2,3,4,5

<小时/>

第一次通过后,剩下的数字是 - 2,4。 1,3,5已被删除
第二遍之后 - 2 被删除,所以我们剩下 4

<小时/>

该函数应返回 4。在我的方法中,我创建了一个包含 n 个数字的数组。每个元素的值可以为 0 或 1,0 表示该元素未被删除,1 表示该元素被删除。我的代码是

<小时/>
int findposition(int n)
{
int barr[n];
int count=0,i,begIndex=0;

for(i=0;i<n;i++)
barr[i]=0;

while(n!=count+1)
{
for(i=begIndex;i<n;i=i+2)
{
barr[i]=1;
}


for(i=0;i<n;i++)
{
if(barr[i]==0)
begIndex=i;
}

}

return (begIndex+1);
}
<小时/>

上面的函数编译成功,但从 main 方法调用时不打印任何内容。另外,我认为我的方法有点笨拙。有没有更简洁的方法来做到这一点。

最佳答案

如果您查看二进制位置表示法中删除的对象的索引,您会发现在第一步中您删除了所有最后一位数字为 1 的数字。这给我们留下了 xxxx0 形式的数字,其中 xxxx 都是某个范围内的二进制数字。所以你会有 001 0、010 0、011 0、100 0。很明显,第二个步骤删除所有带有后缀 10 的数字,最终得到 01 00、10 00、11 00 等。

显然最后一个数字是尾随零最多的数字。

关于c - 挑出奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com