C# C语言中的特殊奇数倒三角形问题#
我非常感谢您对这个问题的帮助,我将自己总结一下,但也包括到目前为止的实际说明和代码 编写控制台C#程序以执行以下操作:C# C语言中的特殊奇数倒三角形问题#,c#,C#,我非常感谢您对这个问题的帮助,我将自己总结一下,但也包括到目前为止的实际说明和代码 编写控制台C#程序以执行以下操作: * *** ***** ******* ********* ********* ******* ***** *** * 询问用户最大字符数。如果用户输入偶数加1将其转换为奇数,则应为奇数 要求用户打印字符 然后,您的程序应该输出两个倒置的垂直三角形,其底边等于#1中输入的数字,由#2中的字符组成 三角形的一行中的字符数与其下一行中的字符
*
***
*****
*******
*********
*********
*******
*****
***
*
*
***
*****
*******
*********
*********
*******
*****
***
*
到目前为止,我可以让代码打印出正确的字符数,但不能正确对齐到这个形状。
我会在这篇文章的底部附上我的代码。不管是谁,你能确切地解释一下for循环是如何实现这一点的吗?我知道这不是一个非常难的问题,但C#对我来说是一门新语言,课程完全是在线的,我感到迷失在这种概念性思维中。非常感谢所有回应的人
public class Class1
{
public void Main(string[] args)
{
int n;
char ch;
try
{
Console.Write("Enter the Max Number of Characters ::");
n = int.Parse(Console.ReadLine());
if (n % 2 == 0)
n++;
Console.Write("Enter Character Which You Want to Print ::");//output message for display
ch = char.Parse(Console.ReadLine());//value to get from user
Console.WriteLine(PatternPrint(n, ch));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public string PatternPrint(int n, char ch)
{
int i, j, k, l;//variable to declare
string str = "";//string to display
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
{
str = str + " ";
}
for (k = 1; k <= i; k++)
{
str = str + ch;
}
for (l = i -1; l >= 1; l--)
{
str = str + ch;
}
str = str + "\n";
}
return str;//return string
}
}
}
公共类1
{
公共void Main(字符串[]参数)
{
int n;
char ch;
尝试
{
控制台。写入(“输入最大字符数::”;
n=int.Parse(Console.ReadLine());
如果(n%2==0)
n++;
Console.Write(“输入要打印的字符:”;//输出消息以供显示
ch=char.Parse(Console.ReadLine());//从用户处获取的值
控制台写入线(图案打印(n,ch));
}
捕获(例外e)
{
控制台写入线(e.Message);
}
}
公共字符串模式打印(int n,char ch)
{
int i,j,k,l;//要声明的变量
string str=”“;//要显示的字符串
对于(i=1;i您的逻辑有问题,因为它只在一个方向上打印。然而,根据您的要求,您还需要反向模式
您的代码输出是:
*
***
*****
*******
*********
***********
*************
***************
*****************
请尝试下面的代码,因为它是双向打印的
using System;
public class Test
{
public static void Main()
{
Console.Write("Enter the Max Number of Characters ::");
int totalChar = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter Character Which You Want to Print ::")
char character = char.Parse(Console.ReadLine());
totalChar = (totalChar % 2 == 0) ? totalChar += 1 : totalChar;
int mainIndex, spaceIndex, charIndex;
for(mainIndex = 1; mainIndex <= totalChar; mainIndex += 2)
{
for(spaceIndex = totalChar; spaceIndex >= mainIndex; spaceIndex -= 2)
Console.Write(" ");
for(charIndex = 1; charIndex <= mainIndex; charIndex++)
Console.Write(character);
Console.WriteLine();
}
for(mainIndex = totalChar; mainIndex >= 1; mainIndex -= 2)
{
for(spaceIndex = mainIndex; spaceIndex <= totalChar; spaceIndex += 2)
Console.Write(" ");
for(charIndex = 1; charIndex <= mainIndex; charIndex++)
Console.Write(character);
Console.WriteLine();
}
}
}
此代码适用于我:
public string PatternPrint(int n, char ch) =>
String.Join(
Environment.NewLine,
Enumerable
.Range(1 - n / 2, n - 1)
.Select(x => Math.Abs(x))
.Select(i => "".PadLeft(i) + "".PadLeft(n - 2 * i - 1, ch)));
给定5
和#
我得到:
#
###
#####
###
#
下面是我的简要解释-
观察示例-
输入=>要使用“*”字符,它最多可以出现9次(三角形的底边)
三角形中的每一行可以用两种方式格式化-
空格,然后是字符
空格,然后是字符,然后是空格
遵守您的代码-
你似乎在使用第一种方法
第一个循环添加空白
你可能会感到惊讶,但是你的第二个和第三个循环做了同样的事情,它们添加了字符,除了第三个循环少了一个字符
根据示例我们需要什么-
如果每行的最大字符使用量为n,则需要有n+1行。(再多行一行,因为较低的三角形不共享基数)
三角形在(n+1)/2行中完成
要完成上三角,每条线需要,每条线需要
从(n-1)/2开始的空白,减少1
从1开始的字符,增加2
要完成下三角,每条线都需要
空格从0开始,增加1
从n开始的字符,减少2
我鼓励你自己尝试一下,但完成后,这里是参考代码-
public static string PatternPrint(int n, char ch)
{
StringBuilder sb = new StringBuilder();
int spaces, characters;
// Upper triangle
spaces = (n - 1) / 2;
characters = 1;
for (int i = 0; i < (n+1)/2; i++)
{
Enumerable.Repeat(' ', spaces).ToList().ForEach(space => sb.Append(space));
Enumerable.Repeat(ch, characters).ToList().ForEach(character => sb.Append(character));
sb.Append('\n');
spaces -= 1;
characters += 2;
}
// Lower triangle
spaces = 0;
characters = n;
for (int i = 0; i < (n+1)/2; i++)
{
Enumerable.Repeat(' ', spaces).ToList().ForEach(space => sb.Append(space));
Enumerable.Repeat(ch, characters).ToList().ForEach(character => sb.Append(character));
sb.Append('\n');
spaces += 1;
characters -= 2;
}
return sb.ToString();
}
公共静态字符串模式打印(int n,char ch)
{
StringBuilder sb=新的StringBuilder();
int空格、字符;
//上三角
空格=(n-1)/2;
字符=1;
对于(int i=0;i<(n+1)/2;i++)
{
可枚举的.Repeat(“”,空格).ToList().ForEach(空格=>sb.Append(空格));
可枚举的.Repeat(ch,characters).ToList().ForEach(character=>sb.Append(character));
sb.追加('\n');
空格-=1;
字符+=2;
}
//下三角
空格=0;
字符=n;
对于(int i=0;i<(n+1)/2;i++)
{
可枚举的.Repeat(“”,空格).ToList().ForEach(空格=>sb.Append(空格));
可枚举的.Repeat(ch,characters).ToList().ForEach(character=>sb.Append(character));
sb.追加('\n');
空格+=1;
字符-=2;
}
使某人返回字符串();
}
以上代码相关注释-
使用StringBuilder来操作字符串。我认为它更高效,也更简单。可在命名空间System.Text中找到
C#在名称空间系统中提供Linq库。Linq
。代码中使用的可枚举性就是其中的一部分。它提供了更多的东西和扩展方法。真的很酷
总有改进的余地。我的解决方案是基于假设的。当这些假设被忽略时,它会默默地失败