打印1到n范围内的数字,其位交替排列

给定一个正整数 N .问题是打印1到n范围内的数字,其位交替排列。在这里,交替模式意味着数字中的set位和unset位以交替顺序出现。例如-5有一个替代模式,即101。 例如:

null
Input : n = 10Output : 1 2 5 10Input : n = 50Output : 1 2 5 10 21 42

方法1(天真的方法): 生成1到n范围内的所有数字,并为每个生成的数字生成 检查它是否有交替模式的位 时间复杂度为O(n)。 方法2(有效方法): 算法:

printNumHavingAltBitPatrn(n)    Initialize curr_num = 1    print curr_num        while (1)        curr_num <<= 1    if n < curr_num then        break    print curr_num    curr_num = ((curr_num) << 1) ^ 1        if n < curr_num then        break    print curr_num    

CPP

// C++ implementation to print numbers in the range
// 1 to n having bits in alternate pattern
#include <bits/stdc++.h>
using namespace std;
// function to print numbers in the range 1 to n
// having bits in alternate pattern
void printNumHavingAltBitPatrn( int n)
{
// first number having bits in alternate pattern
int curr_num = 1;
// display
cout << curr_num << " " ;
// loop until n < curr_num
while (1) {
// generate next number having alternate
// bit pattern
curr_num <<= 1;
// if true then break
if (n < curr_num)
break ;
// display
cout << curr_num << " " ;
// generate next number having alternate
// bit pattern
curr_num = ((curr_num) << 1) ^ 1;
// if true then break
if (n < curr_num)
break ;
// display
cout << curr_num << " " ;
}
}
// Driver program to test above
int main()
{
int n = 50;
printNumHavingAltBitPatrn(n);
return 0;
}


JAVA

// Java implementation to print numbers in the range
// 1 to n having bits in alternate pattern
import java.io.*;
import java.util.*;
class GFG
{
public static void printNumHavingAltBitPatrn( int n)
{
// first number having bits in alternate pattern
int curr_num = 1, i = 1;
// display
System.out.print(curr_num + " " );
// loop until n < curr_num
while (i!=0)
{
i++;
// generate next number having alternate
// bit pattern
curr_num <<= 1;
// if true then break
if (n < curr_num)
break ;
// display
System.out.print(curr_num + " " );
// generate next number having alternate
// bit pattern
curr_num = ((curr_num) << 1) ^ 1;
// if true then break
if (n < curr_num)
break ;
// display
System.out.print(curr_num + " " );
}
}
public static void main (String[] args)
{
int n = 50;
printNumHavingAltBitPatrn(n);
}
}
// Code Contributed by Mohit Gupta_OMG <(0_o)>


Python3

# Python3 program for count total
# zero in product of array
# function to print numbers in the range
# 1 to nhaving bits in alternate pattern
def printNumHavingAltBitPatrn(n):
# first number having bits in
# alternate pattern
curr_num = 1
# display
print (curr_num)
# loop until n < curr_num
while ( 1 ) :
# generate next number having
# alternate bit pattern
curr_num = curr_num << 1 ;
# if true then break
if (n < curr_num):
break ;
# display
print ( curr_num )
# generate next number having
# alternate bit pattern
curr_num = ((curr_num) << 1 ) ^ 1 ;
# if true then break
if (n < curr_num):
break
# display
print ( curr_num )
# Driven code
n = 50
printNumHavingAltBitPatrn(n)
# This code is contributed by "rishabh_jain".


C#

// C# implementation to print numbers in the range
// 1 to n having bits in alternate pattern
using System;
class GFG {
// function to print numbers in the range 1 to n
// having bits in alternate pattern
public static void printNumHavingAltBitPatrn( int n)
{
// first number having bits in alternate pattern
int curr_num = 1, i = 1;
// display
Console.Write(curr_num + " " );
// loop until n < curr_num
while (i!=0)
{
// generate next number having alternate
// bit pattern
curr_num <<= 1;
// if true then break
if (n < curr_num)
break ;
// display
Console.Write(curr_num + " " );
// generate next number having alternate
// bit pattern
curr_num = ((curr_num) << 1) ^ 1;
// if true then break
if (n < curr_num)
break ;
// display
Console.Write(curr_num + " " );
}
}
// Driver code
public static void Main ()
{
int n = 50;
printNumHavingAltBitPatrn(n);
}
}
// This code is contributed by Sam007.


PHP

<?php
// php implementation to print
// numbers in the range
// 1 to n having bits in
// alternate pattern
// function to print numbers
// in the range 1 to n
// having bits in alternate
// pattern
function printNumHavingAltBitPatrn( $n )
{
// first number having bits
// in alternate pattern
$curr_num = 1;
// display
echo $curr_num . " " ;
// loop until n < curr_num
while (1)
{
// generate next number
// having alternate
// bit pattern
$curr_num <<= 1;
// if true then break
if ( $n < $curr_num )
break ;
// display
echo $curr_num . " " ;
// generate next number
// having alternate
// bit pattern
$curr_num = (( $curr_num ) << 1) ^ 1;
// if true then break
if ( $n < $curr_num )
break ;
// display
echo $curr_num . " " ;
}
}
// Driver code
$n = 50;
printNumHavingAltBitPatrn( $n );
// This code is contributed by mits
?>


Javascript

<script>
// Javascript implementation to print numbers in the range
// 1 to n having bits in alternate pattern
// function to print numbers in the range 1 to n
// having bits in alternate pattern
function printNumHavingAltBitPatrn(n)
{
// first number having bits in alternate pattern
var curr_num = 1;
// display
document.write(curr_num + " " );
// loop until n < curr_num
while ( true ) {
// generate next number having alternate
// bit pattern
curr_num <<= 1;
// if true then break
if (n < curr_num)
break ;
// display
document.write(curr_num + " " );
// generate next number having alternate
// bit pattern
curr_num = ((curr_num) << 1) ^ 1;
// if true then break
if (n < curr_num)
break ;
// display
document.write(curr_num + " " );
}
}
// Driver program to test above
var n = 50;
printNumHavingAltBitPatrn(n);
</script>


输出:

1 2 5 10 21 42

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享