2

プログラムはパラメータ 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 が大きすぎる場合) は、小文字で開始し、小文字を使い果たした場合は、再び大文字で開始する必要があります。私はプログラミングの初心者です。そして、どこから始めればよいか本当にわかりません。私はしばらくループを回避してきましたが、まだ何の手がかりもありません。

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

Char[]moduloStringBuilderおよび効率のためfor-loopにインクリメントするa を使用する別のアプローチを次に示します。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

于 2012-07-23T08:18:12.830 に答える