给定两个整数N和K ,任务是在由范围[1, N]中的数字组成的奇偶序列中的第K个数字中找到设置位的计数。奇偶序列首先包含从1到N 的所有奇数,然后是从1到N 的所有偶数。
例子:
Input: N = 8, K = 4
Output: 3
The sequence is 1, 3, 5, 7, 2, 4, 6 and 8.
4th element is 7 and the count
of set bits in it is 3.
Input: N = 18, K = 12
Output: 2
方法:本文讨论了一种找到所需序列的第 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 现场工作专业课程和学生竞争性编程现场课程。