規則がわからりません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
劉578

規則がわからりません

#1

投稿記事 by 劉578 » 3年前

1~4の4つの数の全ての順列を下記の順に書き出すプログラムを作成しなさい.という課題ですが、規則性がわかりません。方針だけでも教えてほしいです。よろしくお願いします。
1234
1243
1324
1342
1432
1423
2134
2143
2314
2341
2431
2413
3214
3241
3124
3142
3412
3421
4231
4213
4321
4312
4132
4123

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 規則がわからりません

#2

投稿記事 by みけCAT » 3年前

そのまんま埋め込むのが簡単でしょう。

コード:

#include <stdio.h>

int main(void) {
	static const char* data[] = {
		"1234", "1243", "1324", "1342", "1432", "1423",
		"2134", "2143", "2314", "2341", "2431", "2413",
		"3214", "3241", "3124", "3142", "3412", "3421",
		"4231", "4213", "4321", "4312", "4132", "4123",
		NULL
	};
	const char** p;
	for (p = data; *p != NULL; p++) {
		puts(*p);
	}
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Meta3

Re: 規則がわからりません

#3

投稿記事 by Meta3 » 3年前

{234}で2,3,4から作られる順列の全体を表すことにすると

{1234}は

1{234} (最初が1の順列)
2{134} (最初が2の順列 {134}は1234から1番目と2番目を交換して作った)
3{214} (最初が3の順列 {214}は1234から1番目と3番目を交換して作った)
4{231} (最初が4の順列 {213}は1234から1番目と4番目を交換して作った)

と分けられます。

同様に
{234}は
2{34}(最初が2の順列)
3{24}(最初が3の順列 {24}は234から1番目と2番目を交換して作った)
4{32}(最初が4の順列 {32}は234から1番目と3番目を交換して作った)

{34}は
34
43
であることは明らかです。

つまり
12{34}
13{24}
14{32}
21{34}
23{14}
24{31}
32{14}
31{24}
34{12}
42{31}
43{21}
41{32}

と分け、最終的にこの順列になることになります。


littlestream
記事: 48
登録日時: 7年前

Re: 規則がわからりません

#5

投稿記事 by littlestream » 3年前

コード:

//こんな感じでしょうか?

#include<stdio.h>
#include<stdlib.h>

int table[4]={1,2,3,4};

//1234



int main()
{
    int num=0;
    
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            for(int k=0;k<4;k++)
            {
                for(int l=0;l<4;l++)
                {
                    if(i!=j && i!=k && i!=l && j!=k && j!=l && k!=l && l!=j)
                    {
                        printf("%d%d%d%d\n",table[i],table[j],table[k],table[l]);
                        num++;    
                    }
                }
            }
        }
    }
    printf("%d回実行されました。\n",num);   
    
    return 0;
}

返信

“C言語何でも質問掲示板” へ戻る