给定N,则为Pascal三角形的行号(行从0开始)。在Pascal三角形的第N行中找到奇数计数。
先决条件:帕斯卡三角以N的二进制表示形式计数1的数目
例子 :
Input : 11
Output : 8
Input : 20
Output : 4
方法:看来答案始终是2的幂。实际上,存在以下定理:
定理:在Pascal三角形的第N行中,奇数项的数量增加了2,而在N的二进制展开中,奇数项的数量增加了1。
示例:由于83 = 64 + 16 + 2 + 1具有二进制扩展(1010011),因此行83具有pow(2,4)= 16个奇数。
下面是上述方法的实现:
C++
// CPP code to find the count of odd numbers
// in n-th row of Pascal's Triangle
#include
using namespace std ;
/* Function to get no of set
bits in binary representation
of positive integer n */
int countSetBits(int n)
{
unsigned int count = 0;
while (n)
{
count += n & 1;
n >>= 1;
}
return count;
}
int countOfOddsPascal(int n)
{
// Count number of 1's in binary
// representation of n.
int c = countSetBits(n);
// Number of odd numbers in n-th
// row is 2 raised to power the count.
return pow(2, c);
}
// Driver code
int main()
{
int n = 20;
cout << countOfOddsPascal(n) ;
return 0;
}
Java
// Java code to find the count of odd
// numbers in n-th row of Pascal's
// Triangle
import java.io.*;
class GFG {
/* Function to get no of set
bits in binary representation
of positive integer n */
static int countSetBits(int n)
{
long count = 0;
while (n > 0)
{
count += n & 1;
n >>= 1;
}
return (int)count;
}
static int countOfOddsPascal(int n)
{
// Count number of 1's in binary
// representation of n.
int c = countSetBits(n);
// Number of odd numbers in n-th
// row is 2 raised to power the
// count.
return (int)Math.pow(2, c);
}
// Driver code
public static void main (String[] args)
{
int n = 20;
System.out.println(
countOfOddsPascal(n));
}
}
// This code is contributed by anuj_67.
Python3
# Python code to find the count of
# odd numbers in n-th row of
# Pascal's Triangle
# Function to get no of set
# bits in binary representation
# of positive integer n
def countSetBits(n):
count =0
while n:
count += n & 1
n >>= 1
return count
def countOfOddPascal(n):
# Count number of 1's in binary
# representation of n.
c = countSetBits(n)
# Number of odd numbers in n-th
# row is 2 raised to power the count.
return pow(2, c)
# Driver Program
n = 20
print(countOfOddPascal(n))
# This code is contributed by Shrikant13
C#
// C# code to find the count of odd numbers
// in n-th row of Pascal's Triangle
using System;
class GFG {
/* Function to get no of set
bits in binary representation
of positive integer n */
static int countSetBits(int n)
{
int count = 0;
while (n > 0)
{
count += n & 1;
n >>= 1;
}
return count;
}
static int countOfOddsPascal(int n)
{
// Count number of 1's in binary
// representation of n.
int c = countSetBits(n);
// Number of odd numbers in n-th
// row is 2 raised to power the
// count.
return (int)Math.Pow(2, c);
}
// Driver code
public static void Main ()
{
int n = 20;
Console.WriteLine(
countOfOddsPascal(n)) ;
}
}
// This code is contributed by anuj_67.
PHP
>= 1;
}
return $count;
}
function countOfOddsPascal($n)
{
// Count number of 1's in binary
// representation of n.
$c = countSetBits($n);
// Number of odd numbers in n-th
// row is 2 raised to power the count.
return pow(2, $c);
}
// Driver code
$n = 20;
echo countOfOddsPascal($n) ;
// This code is contributed by mits.
?>
输出:
4
时间复杂度: O(L),其中L是给定N的二进制表示形式的长度。
参考: https : //www.math.hmc.edu/funfacts/ffiles/30001.4-5.shtml