📜  CGI 编码轮中提出的图案打印问题

📅  最后修改于: 2022-05-13 01:57:59.013000             🧑  作者: Mango

CGI 编码轮中提出的图案打印问题

编写一个程序,接收一个数字作为输入,并以如下格式打印它,如下所示。
例子 :

Input : n = 3
Output :
1*2*3*10*11*12
--4*5*8*9
----6*7

Input : n = 4
Output :
1*2*3*4*17*18*19*20
--5*6*7*14*15*16
----8*9*12*13
------10*11

在 CGI 编码轮中被问到

方法:方法是把问题看成不是一个单一的任务,而是三个任务,结合起来完成主要任务。这三个任务是打印图案的左半部分、打印破折号 (-) 和打印图案的右半部分。结合所有三个任务,我们将能够打印模式。

left-half of pattern
1*2*3*
--4*5*
----6*

A function printdashes() to print the "-".

right-half of

 pattern
10*11*12
*8*9
7

下面是实现。

C++
// C program to print the given pattern
#include 
 
// utility function to print "-" in every
// row. This will take care of printing
// "-" in the start of every row
void printdashes(int k)
{
    int i;
    for (i = 1; i <= k; i++)
        printf("-");
}
 
// function to print the pattern
void pattern(int n){
     
    // variables for vertical left half
    /*
    1*2*3*
    --4*5*
    ----6*
    */
    int row, column, dashes = 0;
    int i, j, dash_counter = 0;
    int value = 1;
 
    // variables for vertical right half
    /*
    10*11*12
    *8*9
    7
    */
    int k, l, decrementor = 0;
    int column_decrementor = 0;
    int support = n - 1;
    int temp = ((n * n) + 1);
    int temp1 = (n * 2) - 1;
    int z = temp;
 
    int tracker;
 
     
    for (i = 1; i <= n; i++) {
        printdashes(dash_counter);
         
        // This part will take care of the vertical
    // left half of the pattern
        for (j = 1; j <= (2 * n) - dash_counter; j++) {
             
            // Printing the "*" in even positions
            if (j % 2 == 0)
                printf("*");
            else {
                printf("%d", value);
                value++;
            }
        }
 
        // This part will take care of the vertical
        // right half of the pattern
        for (k = 1; k <= (temp1 - decrementor); k++) {
             
            // Printing the "*" in even positions
            if (k % 2 == 0)
                printf("*");
            else {
                if (k == 1)
                    tracker = temp;
                printf("%d", temp);
                temp++;
            }
        }
        decrementor += 2;
        temp = tracker - support;
        support--;
 
        // In every row, the number of dash counts
        // is increased by 2
        dash_counter += 2;
        printf("\n");
    }
}
 
// driver program
int main()
{  
    int n = 3;
    pattern(n);
    return 0;
}


Java
// Java program to print the given pattern
 
class GFG {
     
// utility function to print "-" in every
// row. This will take care of printing
// "-" in the start of every row
static void printdashes(int k)
{
    int i;
    for (i = 1; i <= k; i++)
    System.out.print("-");
}
 
// function to print the pattern
static void pattern(int n) {
 
    // variables for vertical left half
    /*
    1*2*3*
    --4*5*
    ----6*
    */
    int row, column, dashes = 0;
    int i, j, dash_counter = 0;
    int value = 1;
 
    // variables for vertical right half
    /*
    10*11*12
    *8*9
    7
    */
    int k, l, decrementor = 0;
    int column_decrementor = 0;
    int support = n - 1;
    int temp = ((n * n) + 1);
    int temp1 = (n * 2) - 1;
    int z = temp;
 
    int tracker = 0;
 
    for (i = 1; i <= n; i++) {
    printdashes(dash_counter);
 
    // This part will take care of the vertical
    // left half of the pattern
    for (j = 1; j <= (2 * n) - dash_counter; j++) {
 
        // Printing the "*" in even positions
        if (j % 2 == 0)
        System.out.print("*");
        else {
        System.out.print(value);
        value++;
        }
    }
 
    // This part will take care of the vertical
    // right half of the pattern
    for (k = 1; k <= (temp1 - decrementor); k++) {
 
        // Printing the "*" in even positions
        if (k % 2 == 0)
        System.out.print("*");
        else {
        if (k == 1)
            tracker = temp;
        System.out.print(temp);
        temp++;
        }
    }
 
    decrementor += 2;
    temp = tracker - support;
    support--;
 
    // In every row, the number of dash counts
    // is increased by 2
    dash_counter += 2;
    System.out.print("\n");
    }
}
 
// Driver code
public static void main(String arg[]) {
    int n = 3;
    pattern(n);
}
}
 
// This code is contributed by Anant Agarwal.


Python3
# Python program to print
# the given pattern
  
# utility function to
# print "-" in every
# row. This will take
# care of printing
# "-" in the start of every row
def printdashes(k):
 
    for i in range(1,k+1):
        print("-",end="")
 
  
# function to print the pattern
def pattern(n):
      
    # variables for vertical left half
    '''
    1*2*3*
    --4*5*
    ----6*
    '''
     
    dashes = 0
    dash_counter = 0
    value = 1
  
    # variables for vertical right half
    '''
    10*11*12
    *8*9
    7
    '''
    decrementor = 0
    column_decrementor = 0
    support = n - 1
    temp = ((n * n) + 1)
    temp1 = (n * 2) - 1
    z = temp
  
    for i in range(1,n+1):
         
        printdashes(dash_counter)
          
        # This part will take
        # care of the vertical
        # left half of the pattern
        for j in range(1,(((2 * n) - dash_counter)+1)):
              
            # Printing the "*" in even positions
            if (j % 2 == 0):
                print("*",end="")
            else:
                print(value,end="")
                value=value+1
             
  
        # This part will take
        # care of the vertical
        # right half of the pattern
        for k in range(1,((temp1 - decrementor)+1)):
              
            # Printing the "*" in even positions
            if (k % 2 == 0):
                print("*",end="")
            else:
                if (k == 1):
                    tracker = temp
                print(temp,end="")
                temp=temp + 1
             
         
        decrementor =decrementor + 2
        temp = tracker - support
        support=support - 1
  
        # In every row, the number of dash counts
        # is increased by 2
        dash_counter =dash_counter + 2
        print("")
     
# driver program
n = 3
pattern(n)
 
# This code is contributed
# by Anant Agarwal.


C#
// C# program to print the given pattern
using System;
class GFG {
     
// utility function to print "-" in every
// row. This will take care of printing
// "-" in the start of every row
static void printdashes(int k)
{
    int i;
    for (i = 1; i <= k; i++)
    Console.Write("-");
}
 
// function to print the pattern
static void pattern(int n) {
 
    // variables for vertical left half
    /*
    1*2*3*
    --4*5*
    ----6*
    */
    int i, j, dash_counter = 0;
    int value = 1;
 
    // variables for vertical right half
    /*
    10*11*12
    *8*9
    7
    */
    int k, decrementor = 0;
    int support = n - 1;
    int temp = ((n * n) + 1);
    int temp1 = (n * 2) - 1;
     
 
    int tracker = 0;
 
    for (i = 1; i <= n; i++) {
    printdashes(dash_counter);
 
    // This part will take care of the vertical
    // left half of the pattern
    for (j = 1; j <= (2 * n) - dash_counter; j++) {
 
        // Printing the "*" in even positions
        if (j % 2 == 0)
        Console.Write("*");
        else {
        Console.Write(value);
        value++;
        }
    }
 
    // This part will take care of the vertical
    // right half of the pattern
    for (k = 1; k <= (temp1 - decrementor); k++) {
 
        // Printing the "*" in even positions
        if (k % 2 == 0)
        Console.Write("*");
        else {
        if (k == 1)
            tracker = temp;
        Console.Write(temp);
        temp++;
        }
    }
 
    decrementor += 2;
    temp = tracker - support;
    support--;
 
    // In every row, the number of dash counts
    // is increased by 2
    dash_counter += 2;
  Console.WriteLine();
    }
}
 
// Driver code
public static void Main() {
    int n = 3;
    pattern(n);
}
}
 
// This code is contributed by vt_m.


PHP


Javascript


C++
// C++ program to print the given pattern
#include 
using namespace std;
 
// function to print the pattern
void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col - ((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                cout << "-";
            }
            else
            {
                if(col == 1)
                {
                    cout << x;
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    cout << x;
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    cout << t;
                    t++;
                }
                else
                {
                    cout << "*";
                }
            }                
        }
        z = (z - row) + i;
        cout << "\n";
    }
}
 
// Driver code
int main()
{
    int row = 3;
    printPattern(row);
    return 0;
}
 
// This code is contributed by shubhamsingh10


C
// C program to print the given pattern
#include
 
// function to print the pattern
void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col - ((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                printf("-");
            }
            else
            {
                if(col == 1)
                {
                    printf("%d", x);
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    printf("%d", x);
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    printf("%d", t);;
                    t++;
                }
                else
                {
                    printf("*");
                }
            }                
        }
        z = (z - row) + i;
        printf("\n");
    }
}
 
// Driver code
int main()
{
    int row = 3;
    printPattern(row);
    return 0;
}
 
// This code is contributed by ankurmishra1794


Java
// Java program to print the given pattern
class GFG
{
 
// function to print the pattern
static void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
                     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col -((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                System.out.print("-");
            }
            else
            {
                if(col == 1)
                {
                    System.out.print(x);
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    System.out.print(x);
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    System.out.print(t);
                    t++;
                }
                else
                {
                    System.out.print("*");
                }
            }                
        }
        z = (z - row) + i;
        System.out.print("\n");
    }
}
 
// Driver code
public static void main(String[] args)
{
    int row = 3;
    printPattern(row);
}
}
 
/* This code is contributed by PrinciRaj1992 */


Python3
# Python3 program to print the given pattern
 
# Function to print the pattern
def printPattern(row):
     
    x = 1
    z = (row * row) + 1
     
    if row == 1:
        col = 1
    else:
        col = (row * 4) - 1
     
    for i in range(1, row + 1):
        t = z
         
        for j in range(1, col - ((i - 1) * 2) + 1):
            if ((i * 2) - 2 >= j):
                print("", end = "-")          
            else:
                if (col == 1):
                    print(x, end = "")
                elif (j <= col / 2 and j % 2 == 1):
                    print(x, end = "")
                    x += 1
                elif (j > col / 2 and j % 2 == 1):
                    print(t, end = "")
                    t += 1
                else:
                    print("*", end = "")
                     
        z = (z - row) + i
        print()
 
# Driver code
row = 3
 
printPattern(row)
 
# This code is contributed by shivani


C#
// C# program to print the given pattern
using System;
 
class GFG
{
 
// function to print the pattern
static void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col -((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                Console.Write("-");
            }
            else
            {
                if(col == 1)
                {
                    Console.Write(x);
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    Console.Write(x);
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    Console.Write(t);
                    t++;
                }
                else
                {
                    Console.Write("*");
                }
            }                
        }
        z = (z - row) + i;
        Console.Write("\n");
    }
}
 
// Driver code
public static void Main(String[] args)
{
    int row = 3;
    printPattern(row);
}
}
 
// This code is contributed by 29AjayKumar


Javascript


Python3
def pattern(n):
    size = n*(n+1)
     
    # prev1 will be used to keep track of last number
    # printed in left half of pattern
    prev1 = 0
     
    # prev2 will be used to keep track of last number
    # printed in right half of pattern
    prev2 = size
    for i in range(n):
         
        # print the '-'
        print('-'*(2*i), end = '')
         
        # l1 to store numbers of left half to be printed
        l1 = [j for j in range(prev1+1, prev1+n-i+1)]
         
        # l2 to store numbers of right half to be printed
        l2 = [j for j in range(prev2-(n-i)+1,prev2+1)]
         
        # combine l1 and l2 and print the list separated by *
        print(*l1+l2, sep = '*')
         
        # decrease prev2 and increase prev1
        prev2 -= (n-i)
        prev1 += (n-i)
         
     
# driver program
n = 3
pattern(n)
   
# This code is contributed
# by Akash Jain (ultrainstinct).


Python3
n = 4
temp_number = (n*n)+n
counter = 1
for i in range(n):
    temp_list = []
    for j in range(n-i):
        temp_list.append(counter)
        temp_list.append(temp_number-counter+1)
        counter += 1
    temp_list.sort()
    temp_list = [str(each) for each in temp_list]
    [print("--", end="") for k in range(i)]
    print("*".join(temp_list))


输出 :

1*2*3*10*11*12
--4*5*8*9
----6*7

另一种方法:

C++

// C++ program to print the given pattern
#include 
using namespace std;
 
// function to print the pattern
void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col - ((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                cout << "-";
            }
            else
            {
                if(col == 1)
                {
                    cout << x;
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    cout << x;
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    cout << t;
                    t++;
                }
                else
                {
                    cout << "*";
                }
            }                
        }
        z = (z - row) + i;
        cout << "\n";
    }
}
 
// Driver code
int main()
{
    int row = 3;
    printPattern(row);
    return 0;
}
 
// This code is contributed by shubhamsingh10

C

// C program to print the given pattern
#include
 
// function to print the pattern
void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col - ((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                printf("-");
            }
            else
            {
                if(col == 1)
                {
                    printf("%d", x);
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    printf("%d", x);
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    printf("%d", t);;
                    t++;
                }
                else
                {
                    printf("*");
                }
            }                
        }
        z = (z - row) + i;
        printf("\n");
    }
}
 
// Driver code
int main()
{
    int row = 3;
    printPattern(row);
    return 0;
}
 
// This code is contributed by ankurmishra1794

Java

// Java program to print the given pattern
class GFG
{
 
// function to print the pattern
static void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
                     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col -((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                System.out.print("-");
            }
            else
            {
                if(col == 1)
                {
                    System.out.print(x);
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    System.out.print(x);
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    System.out.print(t);
                    t++;
                }
                else
                {
                    System.out.print("*");
                }
            }                
        }
        z = (z - row) + i;
        System.out.print("\n");
    }
}
 
// Driver code
public static void main(String[] args)
{
    int row = 3;
    printPattern(row);
}
}
 
/* This code is contributed by PrinciRaj1992 */

Python3

# Python3 program to print the given pattern
 
# Function to print the pattern
def printPattern(row):
     
    x = 1
    z = (row * row) + 1
     
    if row == 1:
        col = 1
    else:
        col = (row * 4) - 1
     
    for i in range(1, row + 1):
        t = z
         
        for j in range(1, col - ((i - 1) * 2) + 1):
            if ((i * 2) - 2 >= j):
                print("", end = "-")          
            else:
                if (col == 1):
                    print(x, end = "")
                elif (j <= col / 2 and j % 2 == 1):
                    print(x, end = "")
                    x += 1
                elif (j > col / 2 and j % 2 == 1):
                    print(t, end = "")
                    t += 1
                else:
                    print("*", end = "")
                     
        z = (z - row) + i
        print()
 
# Driver code
row = 3
 
printPattern(row)
 
# This code is contributed by shivani

C#

// C# program to print the given pattern
using System;
 
class GFG
{
 
// function to print the pattern
static void printPattern(int row)
{
    int x = 1;
    int z = (row * row) + 1;
    int col = row == 1 ? 1 : (row * 4) - 1;
     
    for(int i = 1; i <= row; i++)
    {
        int t = z;
        for(int j = 1; j <= col -((i - 1) * 2); j++)
        {
            if ((i * 2) - 2 >= j)
            {
                Console.Write("-");
            }
            else
            {
                if(col == 1)
                {
                    Console.Write(x);
                }
                else if(j <= col/2 && j % 2 == 1)
                {
                    Console.Write(x);
                    x++;
                }
                else if(j > col/2 && j % 2 == 1)
                {
                    Console.Write(t);
                    t++;
                }
                else
                {
                    Console.Write("*");
                }
            }                
        }
        z = (z - row) + i;
        Console.Write("\n");
    }
}
 
// Driver code
public static void Main(String[] args)
{
    int row = 3;
    printPattern(row);
}
}
 
// This code is contributed by 29AjayKumar

Javascript


输出 :

1*2*3*10*11*12
--4*5*8*9
----6*7

另一种方法:

Python3

def pattern(n):
    size = n*(n+1)
     
    # prev1 will be used to keep track of last number
    # printed in left half of pattern
    prev1 = 0
     
    # prev2 will be used to keep track of last number
    # printed in right half of pattern
    prev2 = size
    for i in range(n):
         
        # print the '-'
        print('-'*(2*i), end = '')
         
        # l1 to store numbers of left half to be printed
        l1 = [j for j in range(prev1+1, prev1+n-i+1)]
         
        # l2 to store numbers of right half to be printed
        l2 = [j for j in range(prev2-(n-i)+1,prev2+1)]
         
        # combine l1 and l2 and print the list separated by *
        print(*l1+l2, sep = '*')
         
        # decrease prev2 and increase prev1
        prev2 -= (n-i)
        prev1 += (n-i)
         
     
# driver program
n = 3
pattern(n)
   
# This code is contributed
# by Akash Jain (ultrainstinct).

输出 :

1*2*3*10*11*12
--4*5*8*9
----6*7

另一种方法:

Python3

n = 4
temp_number = (n*n)+n
counter = 1
for i in range(n):
    temp_list = []
    for j in range(n-i):
        temp_list.append(counter)
        temp_list.append(temp_number-counter+1)
        counter += 1
    temp_list.sort()
    temp_list = [str(each) for each in temp_list]
    [print("--", end="") for k in range(i)]
    print("*".join(temp_list))

输出:

1*2*3*4*17*18*19*20
--5*6*7*14*15*16
----8*9*12*13
------10*11