一个让小弟我蛋疼好几天也没算出来的算法

一个让我蛋疼好几天也没算出来的算法
本帖最后由 m3905 于 2013-09-25 08:37:53 编辑
I := 1-10000之间的随机数字(例如I = 3000), J := I的最低10% 最高30%(也就是 J := 300-900之间的一个数字),要求J按1-10000的百分比来得到这个数值(可以是浮点),也就是I的数值越低,J的值离I的%30就越近,I的数值越高则J的值离I的%10就越近,例如I=1 则J一定是等于0.3,再例如I=10000,则J一定等于1000.是1-10000逐渐降比率的过程,但是中间这些数值不知道该如何去求.
应该怎样列这个式子?我数学不好,这个问题困扰我好几天了,望各位高手帮忙!谢谢!

------解决方案--------------------
Quote: 引用:

Var I,J,K:Double;
begin
    I := StrToFloat(Edit1.Text);
    J := (0.1 + (10000 - I) * (0.2) / 9999) * I;
    Label1.Caption :=  FloatToStr(J);
end;

------解决方案--------------------
// 特殊情况 单独考虑
function RanIJ( ):string;
var
 tmp, v1, v2, cv: double;
begin
 randomize();
 cv := random();
 v1 := 10000*(1 - cv);
  if cv < 0.5 then
  begin
    tmp := v1 * 0.3 - cv*v1*0.2;
  end
  else
    tmp := v1 * 0.1 + cv*v1*0.2;
  result := floattostr(v1) + ',' + floattostr(tmp);
end;