- ベストアンサー
数の合わせ方?
こんにちは。 どうか教えて下さい。宜しくお願いします。 本当は金額なのですが、今回は分かりやすく数として 質問します。 まず A と言う数が有ります。 そしてB~Kと10種類の数が有ります。 このB~Kの数の中のどれかを足し算すると Aになるのですが、どれを足せばAになるのかが 分かりません。 A~Kまではちゃんとした数が分かっているのですが。 さてB~Kのどれを使えばAになるのか分かる 方法を教えて下さい。宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
xについての多項式 (1+b*x^B)*(1+c*x^C)*(1+d*x^D)*(1+e*x^E)*(1+f*x^F)*(1+g*x^G)*(1+h*x^H)*(1+i*xI)*(1+j*x^J)*(1+k*x^K) -----(☆) を展開したときの x^A の項の係数に着目すればいい。 展開は数式処理ソフトを使えば容易。 たとえば、A=102923,B=1303,C=4286,D=9011,E=70521,F=6920,G=2719,H=12025,I=6434,J=8649,K=3337 とする。 (☆)を展開したときの x^102923 の項の係数は b*c*d*e*g*i*j であるから、 B+C+D+E+G+I+J=A であることがわかる。
その他の回答 (4)
- silverbear
- ベストアンサー率25% (163/639)
No2です。 5個以上とかありえないので、俺ならそーゆーのはプログラム書いてしまいます。 例えばこんな感じで(C言語) #include <stdio.h> #define MAX 10//入力値の数 int main(void) { int a,i,j,sum; int b[MAX+1],c[MAX+1]; b[0] = 0; printf("A = ");//input A scanf("%d", &a); for (i=1;i<=MAX;i++)//input B1~10 { printf("b%d = ",i); scanf("%d", &b[i]); } for(j=0;j<=(2 << MAX)-1;j++)//2進数で0~2^MAXまでループ { for(i=1;i<=MAX+1;i++)//1に対応する場合は値を、0なら0を代入 { c[i] = b[((j >> (i-1)) & 1) * i]; } sum = 0; for (i=1;i<=MAX;i++) { sum = sum + c[i]; } if (sum == a)//期待値なら表示 { for(i=1;i<MAX;i++) { printf("%d+",c[i]); } printf("%d\n",c[i]); } } return 0; }
お礼
ご回答ありがとうございます。 そしてお礼が遅れてしまい、済みませんでした。 教えて頂いた方法、私には全く理解出来ませんが 方法が有る事が分かったので嬉しいです。 いつか分かるようになりたいです。 ありがとうございました。
- tatsumi01
- ベストアンサー率30% (976/3185)
ムダな処理はしますが、必ず答えの出る方法です。 まず、2個の和でAにならないか調べます。B~Kから2個を取る組み合わせは45通り。この全てについて和を取ります。Aに等しいものがあるか順に調べます。あれば、その組み合わせを印刷。なければ、2個では答えなし。 次に、3個の和でAにならないか調べます。B~Kから3個を取る組み合わせは120通り。これについて同じように調べます。 以下、同様に9個まで調べます。 なお、B~Kを大きさの順に並べ変えておけば、かなり計算量を節約できます。たとえば2個の和の場合、小さい方から5番目と6番目の和を作ってAと比べることにより、上半分または下半分の中での2個の組み合わせは調べる必要がなくなりますね。 もっと賢いアルゴリズムもあるかも知れませんが、パス。
お礼
ご回答ありがとうございます。 B以降の数、4つ位までだったら何とか 分かるのですがだいたい5個以上の数字を 足してAにするので良い方法は無いかと 今回質問しました。 しかも今回はB~Kとしましたが もっと多くの数からAを導きださなければ いけない事も有るのです。 また何か思いついたら教えて下さい。 宜しくお願いします。
- silverbear
- ベストアンサー率25% (163/639)
AからB~Kを引いてみて、答えがC~Kになるのをさがすとか。 例 A-B=C~Kか? A-C=D~Kか? A-D=E~Kか? ここで、A-D=Fとすると、D+F=A と言う事になる。 位しか思いつきませんでした。
お礼
ご回答ありがとうございます。 実際にはAは6~7桁の数字で B以降は3~6桁の数字になります。 B以降の中から3~4個くらいでAになるのなら 私でも分かるのですが、今回は5個以上の数を 使ってAにしたいのです。 もしまた何か思いつきましたら 是非とも教えて下さい。
- joe_oshietegoo
- ベストアンサー率26% (209/790)
A~Kまで数字がわかっていてなぜわからないのでしょうか? 回答は一種類ですか?それとも複数?足すのは2ヶ?3ヶ?・・・9ヶまでの任意? これだけの条件提示でどう回答できるのでしょうか。私も専門家の回答に興味あります。
お礼
ご回答ありがとうございます。 何か良さそうな方法なのですが 私には全く理解出来ません。 素人の私でも出来るような 出来れば何かのソフトにA以降の数を入れれば 良いような物が有ると大助かりなのですが。 でも調べられる方法が有るのだと知って 驚いています。 ありがとうございました。