permutation
http://d.hatena.ne.jp/qqqlxl/20060624/p3
(□□-□)/(□□-□□)=15
なる小町算。
□には2,3,4,6,7,8,9が入る。というのがあります。
これを C でキレイに組みたいのですが、どうやるんでしょう?
う〜ん。素直に再帰で書きますか。
#include <stdio.h> int data[7] = {2,3,4,6,7,8,9}; void swap(int *a, int *b) { int temp; temp=*a; *a=*b; *b=temp; } void rec(int* f, int n, void(*r)(int*)) { int i; if(n<=0) { r(f); return; } for(i=0;i<n;i++) { swap(f+i, f+n-1); rec(f,n-1,r); swap(f+i, f+n-1); } return; } void chk(int *p) { if(p[0]*10+p[1]-p[2]==15*(10*p[3]+p[4]-10*p[5]-p[6])) { int i; for(i=0;i<7;i++) printf("%d ",p[i]); printf("\n"); } } int main() { rec(data, 7, chk); return 0; }
あんまり綺麗じゃないなあ。
っていうか、なんで関数ポインタなんて使ってるんだ、俺。
is2004の掲示板、'1'から'7'までの数字を一回だけ使って作れる、7文字の文字列のすべての組み合わせを出力するプログラムを、「できるだけ短く」書け。も参考になるかも。