📜  打印n 0和m 1,以便没有两个0和三个不在一起

📅  最后修改于: 2021-04-22 00:00:24             🧑  作者: Mango

给定两个整数nm ,其中n0的数量, m1s的数量。任务是将所有01打印在一行中,这样就不会有两个0在一起,也不会有三个1在一起。如果无法根据条件排列01 ,则打印-1

例子:

方法:仅当((n – 1)≤mm≤2 *(n + 1)时,我们才有答案。

  • 如果(m == n – 1),则从0开始打印图案010101… ,直到使用了所有的01
  • 如果(m> n)m≤2 *(n + 1),则打印图案110110110…,直到出现必需的1s,并在m等于n – 1时更改为图案0101010…

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Function to print the required pattern
void printPattern(int n, int m)
{
  
    // When condition fails
    if (m > 2 * (n + 1) || m < n - 1) {
        cout << "-1";
    }
  
    // When m = n - 1
    else if (abs(n - m) <= 1) {
        while (n > 0 && m > 0) {
            cout << "01";
            n--;
            m--;
        }
        if (n != 0) {
            cout << "0";
        }
        if (m != 0) {
            cout << "1";
        }
    }
    else {
        while (m - n > 1 && n > 0) {
            cout << "110";
            m = m - 2;
            n = n - 1;
        }
        while (n > 0) {
            cout << "10";
            n--;
            m--;
        }
        while (m > 0) {
            cout << "1";
            m--;
        }
    }
}
  
// Driver program
int main()
{
    int n = 4, m = 8;
    printPattern(n, m);
    return 0;
}


Java
// Java implementation of the above approach 
class GFG 
{ 
    // Function to print the required pattern 
    static void printPattern(int n, int m) 
    { 
        // When condition fails 
        if (m > 2 * (n + 1) || m < n - 1) 
        { 
            System.out.print("-1"); 
        } 
          
        // When m = n - 1 
        else if (Math.abs(n - m) <= 1) 
        { 
            while (n > 0 && m > 0) 
            { 
                System.out.print("01"); 
                n--; 
                m--; 
                  
            } 
            if (n != 0) 
            { 
                System.out.print("0"); 
            } 
            if (m != 0) 
            { 
                System.out.print("1"); 
            }
        } 
        else
        { 
            while (m - n > 1 && n > 0) 
            { 
                System.out.print("110"); 
                m = m - 2; 
                n = n - 1; 
            } 
            while (n > 0) 
            { 
                System.out.print("10"); 
                n--; 
                m--; 
            } 
            while (m > 0) 
            { 
                System.out.print("1"); 
                m--; 
            } 
        } 
    } 
  
    // Driver code 
    public static void main(String []args) 
    { 
        int n = 4, m = 8; 
        printPattern(n, m); 
    } 
} 
  
// This code is contributed by Ita_c.


Python3
# Python 3 implementation of the approach
  
# Function to print the required pattern
def printPattern(n, m):
      
    # When condition fails
    if (m > 2 * (n + 1) or m < n - 1):
        print("-1", end = "")
  
    # When m = n - 1
    elif (abs(n - m) <= 1):
        while (n > 0 and m > 0):
            print("01", end = "");
            n -= 1
            m -= 1
          
        if (n != 0):
            print("0", end = "")
        if (m != 0):
            print("1", end = "")
    else:
        while (m - n > 1 and n > 0):
            print("110", end = "")
            m = m - 2
            n = n - 1
          
        while (n > 0):
            print("10", end = "")
            n -= 1
            m -= 1
          
        while (m > 0):
            print("1", end = "")
            m -= 1
      
# Driver Code
if __name__ == '__main__':
    n = 4
    m = 8
    printPattern(n, m)
  
# This code is contributed by
# Surendra_Gangwar


C#
// C# implementation of the above approach 
using System;
  
class GFG 
{ 
    // Function to print the required pattern 
    static void printPattern(int n, int m) 
    { 
        // When condition fails 
        if (m > 2 * (n + 1) || m < n - 1) 
        { 
            Console.Write("-1"); 
        } 
        // When m = n - 1 
        else if (Math.Abs(n - m) <= 1) 
        { 
            while (n > 0 && m > 0) 
            { 
                Console.Write("01"); 
                n--; 
                m--; 
                  
            } 
            if (n != 0) 
            { 
                Console.Write("0"); 
            } 
            if (m != 0) 
            { 
                Console.Write("1"); 
            }
        } 
        else 
        { 
            while (m - n > 1 && n > 0)  
            { 
                Console.Write("110"); 
                m = m - 2; 
                n = n - 1; 
            } 
            while (n > 0) 
            { 
                Console.Write("10"); 
                n--; 
                m--; 
            } 
            while (m > 0) 
            { 
                Console.Write("1"); 
                m--; 
            } 
        } 
    } 
  
    // Driver code 
    public static void Main() 
    { 
        int n = 4, m = 8; 
        printPattern(n, m); 
    } 
} 
  
// This code is contributed by Ryuga


PHP
 2 * ($n + 1) || $m < $n - 1) 
    { 
        echo("-1"); 
    } 
      
    // When m = n - 1 
    else if (abs($n - $m) <= 1) 
    { 
        while ($n > 0 && $m > 0) 
        { 
            System.out.print("01"); 
            $n--; 
            $m--; 
              
        } 
        if ($n != 0) 
        { 
            echo("0"); 
        } 
        if ($m != 0) 
        { 
            echo("1"); 
        }
    } 
    else
    { 
        while ($m - $n > 1 && $n > 0) 
        { 
            echo("110"); 
            $m = $m - 2; 
            $n = $n - 1; 
        } 
        while ($n > 0) 
        { 
            echo("10"); 
            $n--; 
            $m--; 
        } 
        while ($m > 0) 
        { 
            echo("1"); 
            $m--; 
        } 
    } 
} 
  
// Driver code 
$n = 4; $m = 8;     
printPattern($n, $m); 
  
// This code is contributed by
// Mukul Singh.
?>


输出:
110110110101