-1

だから、初心者として、このプログラムは私に片頭痛を与えています. もちろん、完全なコードを求めているわけではありません。ロジックとオプションを理解したいのです。

大学でカバーした (またはカバーする予定の) C プログラミングのトピックは、動的配列を超えることはありません。これは C++ ではなく C であるため、構造体、関数、配列、ポインターを使用できますが、クラスは使用できません。

解決策は得意ですが、パズルは得意ではありません。私が試したのは、(辺を表すために) 6 つの整数を持つキューブ構造体を作成し、次にcubeの配列を作成することです。

私ができるもう1つのことは、[6] [3] [3]配列を作成することですが、それは複雑すぎると思いますか? 聞きたいことをまとめると、

要件

  • コンソール アプリケーション
  • 派手なグラフィックなどはありません
  • 解決策なし
  • 単なる作業キューブ
  • ユーザー入力を初期化できます

レベル: アマチュア

これは正しいアプローチですか?線をどのように回転させるべきだと思いますか? 繰り返しますが、コードは必要ありません。主なロジックと、コードまたは疑似コードをどのように分割すればよいかを説明していただければ、それは素晴らしいことです。

キューブを使用してキューブ全体を作成する必要があると思いますrubik[3][3][3]cube face[3][3]?

問題を解決するために必要な追加情報を追加します。

編集 - 追加情報: これは私のキューブ配列です (ここのエディターはインデントを少し台無しにしました):

int cube[6][3][3] = {{{1,1,1},{1,1,1},{1,1,1}}, 
            {{2,2,2},{2,2,2},{2,2,2}}, 
            {{3,3,3},{3,3,3},{3,3,3}},
            {{4,4,4},{4,4,4},{4,4,4}},
            {{5,5,5},{5,5,5},{5,5,5}},
            {{6,6,6},{6,6,6},{6,6,6}}  };
4

4 に答える 4

1

立方体は次の式で表すことができます

int tile[6][3][3];

最初のインデックスは立方体の面です

2 番目と 3 番目は行と列を表します

配列の値は色 (0-5) です


立方体で実行できるアクションは、6 つの面のうちの 1 つを時計回りに 90° 回転させることです (つまり、6 つの可能なアクション)。

その他のレシット アクションは、上記のシーケンスで表すことができます。


完全を期すために、質問されていなくても、パズルを解く最も簡単な方法は、解決策が見つかるまで、考えられるすべての一連の動きを力ずくで試すことです。しかし、それではメモリとプロセッサの使用効率が非常に悪くなります。解決策は通常 20 回の移動で見つかるため、最悪のシナリオでは 1.0E14 の移動を試すことになります...

Web にはたくさんのパズル ソリューション アルゴリズムがあります...

于 2013-11-11T18:28:17.327 に答える
0

基本的に、立方体には 6 つの面があり、各側面には 9 つの小さな正方形 (または 9x9 の配列) があります。

この本には、それを表現する方法についていくつかの興味深いアイデアがあります。

于 2013-11-11T18:27:37.897 に答える
-1

//コードが長すぎるため、2 つの部分に分かれています。

1パート

これはうまくいくはずです:(私はそれがかなり長く、多くのコメントがないことを知っていますが、主なアイデアは、文字u-up、f-front、d-down、b-back、l-left、およびr-right. move メソッドで動き回れます. 側面と面の2つの move メソッドがあります. その後 draw メソッドで描画します.

static void Move(ref char b0, ref char b1, ref char b2, ref char b3, ref char b4, ref char b5, ref char b6, ref char b7, ref char b8, ref char b9, ref char b10, ref char b11)
        {
            char m = b11;
            b11 = b10;
            b10 = b9;
            b9 = b8;
            b8 = b7;
            b7 = b6;
            b6 = b5;
            b5 = b4;
            b4 = b3;
            b3 = b2;
            b2 = b1;
            b1 = b0;
            b0 = m;
        }
        static void MoveSide(ref char b0, ref char b1, ref char b2, ref char b3)
        {
            char m = b3;
            b3 = b2;
            b2 = b1;
            b1 = b0;
            b0 = m;
        }
        static void Color(char p)
        {
            switch (p)
            {
                case 'u':
                Console.ForegroundColor = ConsoleColor.White;
                break;
                case 'f':
                Console.ForegroundColor = ConsoleColor.Green;
                break;
                case 'd':
                Console.ForegroundColor = ConsoleColor.Yellow;
                break;
                case 'b':
                Console.ForegroundColor = ConsoleColor.Blue;
                break;
                case 'l':
                Console.ForegroundColor = ConsoleColor.Magenta;
                break;
                case 'r':
                Console.ForegroundColor = ConsoleColor.Red;
                break;
            }
        }

#パート2

static void Move(ref char b0, ref char b1, ref char b2, ref char b3, ref char b4, ref char b5, ref char b6, ref char b7, ref char b8, ref char b9, ref char b10, ref char b11)
            {
                char m = b11;
                b11 = b10;
                b10 = b9;
                b9 = b8;
                b8 = b7;
                b7 = b6;
                b6 = b5;
                b5 = b4;
                b4 = b3;
                b3 = b2;
                b2 = b1;
                b1 = b0;
                b0 = m;
            }
            static void MoveSide(ref char b0, ref char b1, ref char b2, ref char b3)
            {
                char m = b3;
                b3 = b2;
                b2 = b1;
                b1 = b0;
                b0 = m;
            }
            static void Color(char p)
            {
                switch (p)
                {
                    case 'u':
                    Console.ForegroundColor = ConsoleColor.White;
                    break;
                    case 'f':
                    Console.ForegroundColor = ConsoleColor.Green;
                    break;
                    case 'd':
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    break;
                    case 'b':
                    Console.ForegroundColor = ConsoleColor.Blue;
                    break;
                    case 'l':
                    Console.ForegroundColor = ConsoleColor.Magenta;
                    break;
                    case 'r':
                    Console.ForegroundColor = ConsoleColor.Red;
                    break;
                }
            }
于 2016-10-17T20:00:18.537 に答える