在C#中增加特定模式中的字符

时间:2012-07-23 07:44:33

标签: c# .net

程序应该输入参数N并打印出N + 1行。 我必须输出这样的东西。

这是我必须在N = 5

时得到的输出
  

A //增加0

     

AB //增加1

     

ACE //增加2

     

ADGJ //增加3

     

AEIMQ //增加4

该算法使用N作为每次添加之间要跳过的字符数。所以在N = 3时,它是A跳过3到D,跳过3到G,跳过3到J。

当程序用完大写字符时(即当N太大时),它应该以小写字符开头,如果它用完小写,那么它应该再次以大写字母开头,依此类推。 我是编程的新手。我真的不知道从哪里开始。我已经在循环中工作了一段时间,但仍然没有任何线索。

3 个答案:

答案 0 :(得分:1)

试试这个:

public string GetOutPut(int increment)
{
    string alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    string output = string.Empty;

    for(int i=0; i<=increment; i++)
    {
       int index = i*increment;

       if(index>alphabets.Length)
          index = index % alphabets.Length;

       output+= alphabets[index];
    }

    return output;
}

答案 1 :(得分:1)

目前尚不清楚如何获得所需的行数 - 因为您说的是N+1,但您的示例仅提供N行。

以下内容可用于生成这些单独的每一行,并且可以通过在while循环中粘贴代码来修改Algo方法以生成n+1行,递减{{1} }和n并在len上使用AppendLine

StringBuilder

答案 2 :(得分:1)

以下是使用Char[]moduloStringBuilderfor-loop的另一种方法,其效率增加n

readonly static Char[] letters = 
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToCharArray();

static String appendChars(int n)
{
    int length = n + 1;
    StringBuilder sBuilder = new StringBuilder("A", length);

    for (int i = n; sBuilder.Length < length; i += n)
    {
        Char nextChar = letters[i % letters.Length];
        sBuilder.Append(nextChar);
    }

    return sBuilder.ToString();
}

测试您的样本数据:

int n = 5;
IEnumerable<String> allWords = Enumerable.Range(0, n).Select(i => appendChars(i));
Console.Write(string.Join(Environment.NewLine, allWords));

输出:

A
AB 
ACE 
ADGJ 
AEIMQ

以下是演示:http://ideone.com/0sspY