2

私はこれを行う方法についての答えを探していました。

私がやろうとしているのは、たとえば{1, 3, 5, 6, 8, 7, 6 ,5, 3, 1}(ただし、ユーザー入力を使用します)数値の配列を取得し、ミラーリングされたこれらの数値の複製を見つけて、その配列の1つのインスタンスに含まれるインデックスの数を返すことです。

C# の基本は知っていますが、このタスクを把握できません。いいえ、これは宿題ではありません。これは、私の知識を深めるための私自身のプロジェクトです。

私は現在、この部分のために持っているコードの周りにいませんが、誰かが私に与えることができる助け/アドバイスを本当に感謝しています.

4

2 に答える 2

2
int[] array =  {1, 3, 5, 6, 8, 7, 6 ,5, 3, 1};

//holds left index of mirrored pair, you can easily find the right one
var mirroredIndexes = new List<int>();
var length = array.Length;

for (int i = 0; i < length / 2; i++)
{
    if(array[i] == array[length - i - 1])
        mirroredIndexes.Add(i);
}

mirroredIndexes.ForEach(Console.WriteLine);
Console.WriteLine ("total of {0} mirrored pairs ({1})", 
                       mirroredIndexes.Count, 
                       string.Join(", ", mirroredIndexes.Select(i => array[i])));

次のインデックスを出力します:

0
1
2
3
total of 4 mirrored pairs (1, 3, 5, 6)
于 2013-05-31T06:35:52.587 に答える
1

これがあなたが求めているものだと思います。これにより、一致するインデックスのリストが返されます。例えば。first == 最後、second == 2 番目から最後、 third == 3 番目から最後

var matches = new List<Tuple<int, int>>();

var array = new [] { 0, 1, 2, 3, 4, 5, 3, 2, 1, 0 };

if (array.Length % 2 != 0)
    throw new Exception("Array must have an even amount of elements");

for (int i = 0; i < array.Length / 2; i++)
{
    if (array[i] == array[array.Length - 1 - i])
    {
        matches.Add(new Tuple<int, int>(i, array.Length - 1 - i));
    }
}

var firstMatchingIndex1 = matches[0].Item1;
// This will be 0

var firstMatchingIndex2 = matches[0].Item2;
// This will be 9

カスタム クラスを使用して、さらに進んで、一致した実際の値を取得できます (たとえば、index1 は 1、index2 は 8、値は 1 でした。

于 2013-05-31T06:35:41.933 に答える