2012-05-10 3 views
0

私がお願いしたいと思います:与えられた係数と下限で合計をどのように分けるか?

  • 私は任意の正の整数を持っている、のは言わせて:10
  • それから私は、ランダムな整数(あまりにもそれらのランダムな数)を得た、のは言わせて:5, 7, 8
  • など
  • 私は浮動小数点数を計算したい:私はこの瞬間を持っ5*x + 7*x + 8*x = 10
  • が、私はそれの一般的な下限の制限を持つようにしたいなど、(のは3をしましょう):

5 * X> 3
7 * X> 3
8 * X> 3

  • この状態を達成するために、数字(比)を補正することが可能ですので、この特定の例では、このようになります:
sum = 5 + 7 + 8 = 20 
x = 10 (total)/20 (sum) 
x = 0.5 

results: 5*0.5 + 7*0.5 + 8*0.5 = 2.5 + 3.5 + 4 = 10 (total) 

これまでのところ、とても良いですが、2.5は今や所定の最小値になりました。制限3、どのようにこれを解決する!

どうすればいいですか? (C#でお勧めします)

+0

私は思いますあなたがxが0.5であり、5回で決して3より大きくならないと決めたら、S xが5よりも大きくなるようにしたいならば、S あなたは5x 7x 8xを使用している場合、あなたは5x 7y 8zを使用していない場合、上昇を補うために減少する必要があります。 – RhysW

+0

数字がすべて同じでないなら、基本的にはすべてxと呼ぶことができます – RhysW

+0

私は、1回のパスで可能だと思っていましたが、締め切りがあり、このバグが最後の瞬間に現れました。 (私が通常やったように)。これを解決するには?何とか各パスで近似を行っても。例えば – SmartK8

答えて

1

例を挙げて、私たちがそれをどのように解決するかを見てみましょう。

5x7x8xの使用を5x7y8zの使用に変更する必要があります。これは、要件に合わせて変更する必要があり、すべてが同じではないと既に決められているからです。

So currently you get a total answer of 10 by having 

5 times 0.5 = 2.5 
7 times 0.5 = 3.5 
8 times 0.5 = 4 

しかし、5回0.5は3

は、したがって、5回xは少なくとも3、我々は3(あなたが少なくとも必要数)として0.5

で合計を増やす必要があります作るより大きくないです - 2.5(あなたが持っている番号)は0.5

であるので、TOTALは0だけ増加する必要があります。5.すべて一緒に私たちの0.6

now lets recalculate your sum 

5 times 0.6 = 3 
7 tiems 0.5 = 3.5 
8 times 0.5 = 4 

を与える我々は、X = 3が5で割っ必要があります見ることができます5回のXなければならない= 3として

= 10.5 ...ああ、ボール。我々はYまたはZは答えはまだであることを確認するために小さくする必要があることを見ることができるように

OKちょうど10

ので4が3からfurthersをあるとして(8回のz = 4を選択して与えることができます米国最も風下方法)

0.5 8 =で割っ0.0625

5回X

そうZ今= 0.5から0.5に増加相殺する0.0625減少しなければならないので、Z - 0.4375

ある0.0625を
lets redo your sum with these new numbers! 

5 times 0.6 = 3 
7 times 0.5 = 3.5 
8 times 0.4375 = 3.5 

3プラス3.5プラス3.5 = 10!私たちはそれを釘付けにした! yaaay

私はこれが助けて欲しい! D

要約すると、5xが少なくとも3になるようにxを増やす必要がありましたが、xの増加は答えが10より大きいことを意味し、したがってyまたはzのいずれかを小さくしなければなりませんでしたこれを打ち消すために全体の増加が何であれ、他の数字の1つを割って、zまたはyからどれくらい減算して完全な10にする必要があるかを計算します。

+0

OK、正常に動作します。しかし、私はそれを把握し、それをアルゴリズムに入れようとしています。 – SmartK8

+0

それをやってやってやったらやったらやったらやったらやったらやってみろ、3以下であれば見て、それが大きければもっと大きくして、この例では最大の数である8を減算し、それが8であるときはそれを減算します。 – RhysW

+0

もしあれば、8回のzは<3の状態になります。たとえそれが最も遠いものであったとしても。これは一例ですが、実際には何百という数字になるでしょう。 – SmartK8

0

あなたの要件は矛盾しています。 5 * x + 7 * x + 8 * x = 10を、xが単一の値である場合、5 * x> 3で同時に保証することは不可能です。あなたは 5 * X + 7 * yを+ 8 * Z = 10を使用することができます場合は、3 *のvalue_count < 10を持っているが、私は

+0

5 7と8 arentは石で設定されていない、彼らはランダムでも、彼女はまた意味xxxを彼女は技術的にxyzもう1つはNxが3よりも大きくない場合の適合化に成長する – RhysW

+0

質問スレッドを確認して、私は実際の問題を再確認しました。 – SmartK8

+0

RhysW:確かに、基本的には、与えられた範囲内の乱数の数を最小値で固定した合計が必要です。 – SmartK8

0

はあなたが解決しなければならないようだとし、この他のタスクであれば、 はそれが可能となり、最初にタスクを実行してからコードを作成します。 あなたの与えられた条件を見てみましょう Xにmupltipledされたすべての数字は3より大きい必要があります。そのため、7 * 3はすでに21であり、20より大きいので、最大カウントは6になります。 あなたの番号、私たちは数字の最小値を計算する必要があります。それが6であれば、最小値20〜6 = 3、それが5なら20%5 = 4となる。 この2つの条件でのみ、「X」を計算することができる。

+0

7 * 3 7倍xは3より大きくなければなりません N * 3は答え、N * xは3より大きい必要があります – RhysW

関連する問題