• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:数学の置換をプログラムで書くには?)

数学の置換をプログラムで行う方法とは?

このQ&Aのポイント
  • C言語で配列の置換を行うプログラムの作り方とは?
  • 置換をするためには、配列permutationを用意し、n!通りの置換を行う必要があります。
  • 具体的なプログラムの形式としては、forループを使用して配列permutationを変化させながら計算を行っていく形になります。

質問者が選んだベストアンサー

  • ベストアンサー
noname#196706
noname#196706
回答No.1

http://en.cppreference.com/w/cpp/algorithm/next_permutation このページのコードが参考になると思います。

ryuzoji21
質問者

お礼

ありがとうございます。 参考になりました。

その他の回答 (1)

回答No.2

#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; }

ryuzoji21
質問者

お礼

ありがとうございます。 実はcions様の回答を参考に既にCで書き換えていましたが……ww

関連するQ&A