0

Visual Studio を使用して C# で小さなコンソール アプリケーションを作成しています。

私は2つの小さなプログラムを書きたいと思っています。どちらもコンソールから入力された6つの整数を取り、ifステートメントは6つの値すべてを比較し、最終結果は入力された6つの値と値を最高から最低の順に出力するコンソール出力になります. 私はこれを行う方法を理解しようとして頭を悩ませています。

これが完了したら、リストを使用してこれを行うための 2 番目のプログラムを作成します。

したがって、入力された値を保持するために 6 つの整数が必要であり、次に順序付けされた値を保持するために 6 つの整数が必要であると思います。

ネストされたifを実行しようとしましたが、面倒になりました。破棄してやり直すことにしました。

これについて何か助けていただければ幸いです。

これが私が書いていたコードの種類です:

  int one;
        int two;
        int three;
        int four;
        int five;
        int six;


        int firsthighest;
        int secondhighest;
        int thirdhighest;
        int fourthhighest;
        int fifthhighest;
        int sixthhighest;



        Console.WriteLine("Enter a value");
        one = int.Parse(Console.ReadLine());

        Console.WriteLine("Enter a value");
        two = int.Parse(Console.ReadLine());

        Console.WriteLine("Enter a value");
        three = int.Parse(Console.ReadLine());

        Console.WriteLine("Enter a value");
        four = int.Parse(Console.ReadLine());

        Console.WriteLine("Enter a value");
        five = int.Parse(Console.ReadLine());

        Console.WriteLine("Enter a value");
        six = int.Parse(Console.ReadLine());



        if (one > two)
        {
            if (one > three)
            {
                if (one > four)
                {

                    if (one > five)
                    {

                        if (one > six)
                        {
                            firsthighest = one;

                        }

                    }

                }
            }

        }

        else if (two > three)
        {
            if (two > four)
            {

                if (two > five)
                {

                    if (two > six)
                    {
                        firsthighest = two;

                    }

                }

            }

        }

        else if (three > four)
        {


            if (three > five)
            {

                if (three > six)
                {
                    firsthighest = three;

                }

            }

        }
4

5 に答える 5

4

これは宿題ですか?

ifをスキップして、2番目のプログラムに進むことをお勧めします。6つすべてを配列に入れて並べ替えます。

于 2012-10-09T16:34:34.527 に答える
2

配列を使用してから、バブルソートなどのソートアルゴリズムを使用できます。

于 2012-10-09T16:35:09.723 に答える
2

任意のソート アルゴリズムを使用できます。これを 6 つの変数に格納するか、1 つの配列に格納するかは問題ではありません。を使用する場合はEnumerable.OrderBy、このソート アルゴリズムの 1 つを内部的に実装するだけです。

于 2012-10-09T16:37:16.197 に答える
2

if一連のネストされたステートメントを使用して並べ替えアルゴリズムを実装することをどのように計画するかさえわかりません。ちょっと考えてみましょう。次の順序で 6 つの整数を入力したとします。

8,3,6,1,9,10

さて、8 は確かに 3 よりも大きいので、最初の のセットを次のように書いた場合if:

if (one > two) { ... }

それは本当に私たちに何を教えてくれますか? それだけoneが よりも大きいのですが、リストのどこにあるべきかはまだtwoわかりません。oneしたがって、考えられるすべてのシナリオをネストしたとしましょう。

if (one > two) {
    if (one > three) {
        if (one > four) {
            if (one > five) {
                if (one > six) { ... }
            }
        }
    }
}

何が起こるか?これは何を教えてくれるでしょうか?fiveそれは、が よりも大きいことを教えてくれoneますが、問題は がよりも大きいことsixですfive

この短い評価は、これが良い方法ではないことを示しているはずです。したがって、これが悪い方法であることを証明しようとしている場合は、そこまで行ってください。

それでは、問題の解決策に移り、これらの整数をリストに入れましょう。

var list = new List<int> { one, two, three, four, five, six };
var result = list.OrderByDescending(x => x);

内部的には、これは真のソート アルゴリズムであり、複数のパスですべての値を他のすべての値と比較します。ただし、反復を抑えるのに役立つリアルタイムのインデックス作成を使用して、はるかに最適化されています。

于 2012-10-09T17:09:09.370 に答える
1

チェックするキーワードの 1 つは、Sorting Networkです

6 つの入力の場合、定数構造で最低 12 回の比較と交換操作が必要です。1 ~ 8 要素の最適な構造が知られています。4 要素の最適な並べ替えネットワークの例は次のとおりです。

 void f(int a, int b) { if (arr[a]>arr[b]) swap(arr,a,b); }
 f(1,2); f(3,4); f(1,3); f(2,4); f(2,3);

これらの構造はうまく入れ子になりません...

于 2012-10-09T18:48:20.413 に答える