C# 无重复字符印刷方块

C# 无重复字符印刷方块,c#,C#,我想打印一个矩形,如下所示: &#*@ #*@& *@&# @&#* 但问题是我找不到打印这个的算法 我只知道如何打印一个简单的矩形/正方形 public static void Main(string[] args) { Console.Out.Write("Saisir la taille : "); int taille = int.Parse(Console.In.ReadLine()); int

我想打印一个矩形,如下所示:

&#*@
#*@&
*@&#
@&#*
但问题是我找不到打印这个的算法

我只知道如何打印一个简单的矩形/正方形

public static void Main(string[] args)
    {
        Console.Out.Write("Saisir la taille : ");
        int taille = int.Parse(Console.In.ReadLine());
        int i; 
        int j;
        for(i = 0; i < taille; i++){
            for(j = 0; j < taille; j++){
              Console.Write("*");
            }
            Console.WriteLine("");
        } 
    }

谢谢大家!

首先,除非您需要循环之外的迭代器,否则只需在for声明中声明迭代器即可

public static void Main(string[] args)
    {
        Console.Out.Write("Saisir la taille : ");
        int taille = int.Parse(Console.In.ReadLine());
        for(int i = 0; i < taille; i++){
            for(int j = 0; j < taille; j++){
              Console.Write("*");
            }
            Console.WriteLine("");
        } 
    }
我们需要一种方法来知道在任何给定的时间我们想要使用哪个字符,比如说一个迭代器,为了简单起见,我们可以调用characterIndex。我们将在每次迭代中增加它。如果递增它会使其超出字符数组的范围,如果characterIndex==4,则将其设置回零

int characterIndex;
为了获得滚动效果,在每行之前,我们必须选择一个由行偏移的characterIndex

characterIndex = i % chars.Length;
把它都绑在一起

public static void Main(string[] args)
    {
        char[] chars = { '&', `#`, `*`, '@' };
        int characterIndex;
        Console.Out.Write("Saisir la taille : ");
        int taille = int.Parse(Console.In.ReadLine());
        for(int i = 0; i < taille; i++){
            characterIndex = i % chars.Length;
            for(int j = 0; j < taille; j++){
              Console.Write(chars[characterIndex]);
              characterIndex++;
              if(characterIndex == chars.Length)
                  characterIndex = 0;
            }
            Console.WriteLine("");
        } 
    }

通过嵌套循环来获得排列只有在您确切知道将有多少元素的情况下才有效。基本上,您需要为第一个元素之后的每个元素编写一个for循环

处理这个问题的正确方法是递归。而在某些情况下,递归和嵌套for循环是可以互换的。在这种情况下,for循环具有潜在的速度优势。虽然通常情况下,递归和循环都需要处理大量的数据,但这通常很重要,因此最好在可能的情况下选择循环

置换很可能不是循环和递归可以互换的情况。复发似乎是强制性的。正如大家所知,我不会发布任何示例代码

你应该严格使用递归。根据您的示例代码,我基本上认为您是:

在学习环境中 你刚刚学会了递归 下一个任务是输入变量递归可以像6或20大小的输入一样轻松求解
当taille==4时,输出将不会提供所需的滚动效果。此外,当taille时,我认为Mathy术语是置换:这可能有助于您将来的搜索。如果你知道这是置换,这可能是你想要的答案的一半:|它建议使用递归。Wich对于如此短的阵列,将不会在一段时间内产生相关的速度影响。我不认为有一个非递归的解决方案。
public static void Main(string[] args)
    {
        char[] chars = { '&', `#`, `*`, '@' };
        int characterIndex;
        Console.Out.Write("Saisir la taille : ");
        int taille = int.Parse(Console.In.ReadLine());
        for(int i = 0; i < taille; i++){
            characterIndex = i % chars.Length;
            for(int j = 0; j < taille; j++){
              Console.Write(chars[characterIndex]);
              characterIndex++;
              if(characterIndex == chars.Length)
                  characterIndex = 0;
            }
            Console.WriteLine("");
        } 
    }