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