- ベストアンサー
数学の置換をプログラムで行う方法とは?
- C言語で配列の置換を行うプログラムの作り方とは?
- 置換をするためには、配列permutationを用意し、n!通りの置換を行う必要があります。
- 具体的なプログラムの形式としては、forループを使用して配列permutationを変化させながら計算を行っていく形になります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
http://en.cppreference.com/w/cpp/algorithm/next_permutation このページのコードが参考になると思います。
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
#1 で紹介されてたコードをCに書き換えてみた。 #include <stdio.h> typedef int ITEM; typedef ITEM* Iterator; // *x と *y を交換する void iter_swap(Iterator x, Iterator y) { ITEM t = *x; *x = *y; *y = t; } // first以上 last未満 の範囲を反転(逆順)する void reverse(Iterator first, Iterator last) { while ( first != last && first != --last ) { iter_swap(first, last); ++first; } } typedef int bool; const int false = 0; const int true = 1; bool next_permutation(Iterator first, Iterator last) { Iterator i = last; if (first == last) return false; if (first == --i) return false; while (1) { Iterator i1, i2; i1 = i; if (*--i < *i1) { i2 = last; while (!(*i < *--i2)) ; iter_swap(i, i2); reverse(i1, last); return true; } if (i == first) { reverse(first, last); return false; } } } // おためし int main() { int i; const int N = 4; ITEM data[] = { 1, 2, 3, 4 }; do { for ( i = 0; i < N; ++i ) { printf("%d", data[i]); } printf("\n"); } while ( next_permutation(data, data+N) ); return 0; }
お礼
ありがとうございます。 実はcions様の回答を参考に既にCで書き換えていましたが……ww
お礼
ありがとうございます。 参考になりました。