📌  相关文章
📜  从 N 个自然数中分离偶数和奇数后计算第 K 个数中的设置位

📅  最后修改于: 2021-10-26 05:48:01             🧑  作者: Mango

给定两个整数NK ,任务是在由范围[1, N]中的数字组成的奇偶序列中的第K数字中找到设置位的计数。奇偶序列首先包含从1N 的所有奇数,然后是从1N 的所有偶数。
例子:

方法:本文讨论了一种找到所需序列的第 K 个元素的方法。因此,找到所需的数字,然后使用 __builtin_popcount() 找到其中设置位的计数。
下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to return the kth element
// of the Odd-Even sequence
// of length n
int findK(int n, int k)
{
    int pos;
 
    // Finding the index from where the
    // even numbers will be stored
    if (n % 2 == 0) {
        pos = n / 2;
    }
    else {
        pos = (n / 2) + 1;
    }
 
    // Return the kth element
    if (k <= pos) {
        return (k * 2 - 1);
    }
    else
 
        return ((k - pos) * 2);
}
 
// Function to return the count of
// set bits in the kth number of the
// odd even sequence of length n
int countSetBits(int n, int k)
{
 
    // Required kth number
    int kth = findK(n, k);
 
    // Return the count of set bits
    return __builtin_popcount(kth);
}
 
// Driver code
int main()
{
    int n = 18, k = 12;
 
    cout << countSetBits(n, k);
 
    return 0;
}


Java
// Java implementation of the approach
class GFG
{
     
    // Function to return the kth element
    // of the Odd-Even sequence
    // of length n
    static int findK(int n, int k)
    {
        int pos;
     
        // Finding the index from where the
        // even numbers will be stored
        if (n % 2 == 0)
        {
            pos = n / 2;
        }
        else
        {
            pos = (n / 2) + 1;
        }
     
        // Return the kth element
        if (k <= pos)
        {
            return (k * 2 - 1);
        }
        else
            return ((k - pos) * 2);
    }
     
    // Function to return the count of
    // set bits in the kth number of the
    // odd even sequence of length n
    static int countSetBits(int n, int k)
    {
     
        // Required kth number
        int kth = findK(n, k);
         
        int count = 0;
         
        while (kth > 0)
        {
            count += kth & 1;
            kth >>= 1;
        }
         
        // Return the count of set bits
        return count;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 18, k = 12;
     
        System.out.println(countSetBits(n, k));
    }
}
 
// This code is contributed by AnkitRai01


Python3
# Python3 implementation of the approach
 
# Function to return the kth element
# of the Odd-Even sequence
# of length n
def findK(n, k) :
     
    # Finding the index from where the
    # even numbers will be stored
    if (n % 2 == 0) :
        pos = n // 2;
    else :
        pos = (n // 2) + 1;
 
    # Return the kth element
    if (k <= pos) :
        return (k * 2 - 1);
    else :
        return ((k - pos) * 2);
 
# Function to return the count of
# set bits in the kth number of the
# odd even sequence of length n
def countSetBits( n, k) :
     
    # Required kth number
    kth = findK(n, k);
     
    # Return the count of set bits
    return bin(kth).count('1');
 
# Driver code
if __name__ == "__main__" :
    n = 18; k = 12;
    print(countSetBits(n, k));
 
# This code is contributed by kanugargng


C#
// C# implementation of the above approach
using System;
 
class GFG
{
     
    // Function to return the kth element
    // of the Odd-Even sequence
    // of length n
    static int findK(int n, int k)
    {
        int pos;
     
        // Finding the index from where the
        // even numbers will be stored
        if (n % 2 == 0)
        {
            pos = n / 2;
        }
        else
        {
            pos = (n / 2) + 1;
        }
     
        // Return the kth element
        if (k <= pos)
        {
            return (k * 2 - 1);
        }
        else
            return ((k - pos) * 2);
    }
     
    // Function to return the count of
    // set bits in the kth number of the
    // odd even sequence of length n
    static int countSetBits(int n, int k)
    {
     
        // Required kth number
        int kth = findK(n, k);
         
        int count = 0;
         
        while (kth > 0)
        {
            count += kth & 1;
            kth >>= 1;
        }
         
        // Return the count of set bits
        return count;
    }
     
    // Driver code
    public static void Main (String[] args)
    {
        int n = 18, k = 12;
     
        Console.WriteLine(countSetBits(n, k));
    }
}
 
// This code is contributed by PrinciRaj1992


Javascript


输出:
2

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程