给定两个整数n和m ,其中n是0的数量, m是1s的数量。任务是将所有0和1打印在一行中,这样就不会有两个0在一起,也不会有三个1在一起。如果无法根据条件排列0和1 ,则打印-1 。
例子:
Input: n = 1, m = 2
Output: 011
Input: n = 4, m = 8
Output: 110110110101
方法:仅当((n – 1)≤m且m≤2 *(n + 1)时,我们才有答案。
- 如果(m == n – 1),则从0开始打印图案010101… ,直到使用了所有的0和1 。
- 如果(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