2

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

这是我必须在 N = 5 时得到的输出

A //递增0

AB //递增1

ACE //增加 2

ADJJ //增加 3

AEIMQ //递增 4

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

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

4

3 回答 3

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;
}
于 2012-07-23T07:55:21.143 回答
1

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

以下可用于生成这些单独的行中的每一行,并且Algo可以修改该方法以n+1通过将代码粘贴在 while 循环中、递减n并在 上len使用来生成行:AppendLineStringBuilder

char[] allowedChars = Enumerable.Range('A', 26).Concat(Enumerable.Range('a', 26))
  .Select(i => (char)i).ToArray();

[TestMethod]
public void Test()
{
  Assert.AreEqual("A", Algo(0, 1));
  Assert.AreEqual("AB", Algo(1, 2));
  Assert.AreEqual("ACE", Algo(2, 3));
  Assert.AreEqual("ADGJ", Algo(3, 4));
  Assert.AreEqual("AEIMQ", Algo(4, 5));
}

public string Algo(int n, int len)
{
  StringBuilder sb = new StringBuilder();
  int nextCharIndex = 0;
  for (int f = 0; f < len; f++)
  {
    sb.Append(allowedChars[nextCharIndex]);
    //the `%`, or mod, here wraps around the next character back to upper case
    nextCharIndex = (nextCharIndex + n) % allowedChars.Length;
  }
  return sb.ToString();
}
于 2012-07-23T07:56:48.877 回答
1

这是另一种使用 a Char[]、和 a的方法,为了提高效率modulo,它会递增:StringBuilderfor-loopn

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

于 2012-07-23T08:18:12.830 回答