权值问题而已。。 设定总权值, 比如你的A权值为int a;B的权值为int b 总权值就是int weight= a+b; Random rd = new Random(); int tmp=rd.Next(weight); if(tmp<a) { //分配给A } else { //分配给B }这个写法适用于一个个随机分的时候,可能会出现实际分配到的数量跟权值系数有偏差的情况,但这个可以做算法修正,也可以认为在概率上是对的 如果是要一次性按比例分配,也是很简单的事情假定苹果数量 int appleNums=1000000; A权值 int a=7; B的权值 int b=3;int appleForA= appleNums*a/(a+b);//此部分可以对无法整除的苹果进行修正 int appleForB = appleNums - appleForA;如果要考扩展性的话,那就更复杂了。嘿嘿
则a=Math.Round(X*0.7); ///四舍五入
b=Math.Round(X*0.3);
这里有个特殊情况,就是凡事5的倍数,不是2的倍数,用四舍五入就不合适了,比如X=15,a得到的苹果数是10.5,四舍五入是11;b得到的苹果是4.5,四舍五入是5.a+b却是15,所以在编程的时候应该考虑能被5整除的单数。
if(X%5==0 && X%2==0) //10的倍数不影响结果
{
a=Math.Round(X*0.7); ///四舍五入
b=Math.Round(X*0.3);
}
else //能被5整除的单数
{
a=Math.Round(X*0.7);
b=Math.Round(X*0.3)-1; //-1的目的是为了平衡总数,a-1也行,根据自己的喜好。
}
a = 总数 * 系数a /(系数a+系数b)
b = 总数 * 系数b /(系数a+系数b)
我理解为:public void AppDistribution(int app,int Aquotient,int Bquotient,ref AGetApp,ref BGetApp)
{
int Apercent=Aquotient/(Aquotient+Bquotient);
int Apercent=Bquotient/(Aquotient+Bquotient);
AGetApp=app*Apercent;
BGetApp=app*Bpercent;
}
是不是我理解问题。
系数A 系数B 总数CA的数量=C*A%
B的数量=C-A
哈哈 小数题
设定总权值,
比如你的A权值为int a;B的权值为int b
总权值就是int weight= a+b;
Random rd = new Random();
int tmp=rd.Next(weight);
if(tmp<a)
{
//分配给A
}
else
{
//分配给B
}这个写法适用于一个个随机分的时候,可能会出现实际分配到的数量跟权值系数有偏差的情况,但这个可以做算法修正,也可以认为在概率上是对的
如果是要一次性按比例分配,也是很简单的事情假定苹果数量 int appleNums=1000000;
A权值 int a=7;
B的权值 int b=3;int appleForA= appleNums*a/(a+b);//此部分可以对无法整除的苹果进行修正
int appleForB = appleNums - appleForA;如果要考扩展性的话,那就更复杂了。嘿嘿
{
double ratio_a = coeff_a/(coeff_a+coeff_b);
double ratio_b = 1 - ratio_a; double app_a = total*ratio_a;
double app_b = total*ratio_b; int apple_a = app_a;
int apple_b = app_b; if( app_a - apple_a < 0.5 )
apple_a++; // 获得的最终数目的苹果
else
apple_b++; // 获得的最终数目的苹果
}
数量b = 总数 * 系数b /(系数a+系数b) 如果数量a和b必须是整数的话,就分别按你的方法是计算下到底是向上取整还是向下取整比较合理。
如果就是按照权值分配,那就相当于除法,只不过会有小数。
两个结果的小数部分相比较,大的往上取1,小的向下取0就可以。至于相等的情况,可以考虑权值大的向上取,当然,这只是一种策略而已。
你是大学生思想?我看你是脑袋被驴踢了,没看到苹果总数是未知的么,你怎么知道什么时候改向上取整,什么时候该向下取整?别跟我说用if判断啊,你怎么判断?除了用round()函数,你还有什么方法?既然用到round()函数,当然要考虑到所有情况。不会解答,别JB瞎扯淡!按照你的方法,你倒是把你的代码贴出来,还有脸说策略,策略谁不会呀!关键得实现出来。你说的那些到最后没法实现,还不跟放屁一样!
还误差最小呢,难道没看出来你那经过下面两句的赋值以后,
apple_a = app_a;
apple_b = app_b;
apple_a和app_a,apple_b和app_b是永远相等的,你最后来一个if...else判断是干嘛用的?
永远执行apple_a++; 也就是说a的苹果总是多一个。
还误差最小呢,难道没看出来你那经过下面两句的赋值以后,
apple_a = app_a;
apple_b = app_b;
apple_a和app_a,apple_b和app_b是永远相等的,你最后来一个if...else判断是干嘛用的?
永远执行apple_a++; 也就是说a的苹果总是多一个。
这个,我用的C语言,实型给整型赋值的时候,应该是会把小数部分舍去的。我是这个意思。
如果就是按照权值分配,那就相当于除法,只不过会有小数。
两个结果的小数部分相比较,大的往上取1,小的向下取0就可以。至于相等的情况,可以考虑权值大的向上取,当然,这只是一种策略而已。
你是大学生思想?我看你是脑袋被驴踢了,没看到苹果总数是未知的么,你怎么知道什么时候改向上取整,什么时候该向下取整?别跟我说用if判断啊,你怎么判断?除了用round()函数,你还有什么方法?既然用到round()函数,当然要考虑到所有情况。不会解答,别JB瞎扯淡!按照你的方法,你倒是把你的代码贴出来,还有脸说策略,策略谁不会呀!关键得实现出来。你说的那些到最后没法实现,还不跟放屁一样!
你连我说的方法看都看不明白,没什么讨论价值。呵呵。
如果就是按照权值分配,那就相当于除法,只不过会有小数。
两个结果的小数部分相比较,大的往上取1,小的向下取0就可以。至于相等的情况,可以考虑权值大的向上取,当然,这只是一种策略而已。
你是大学生思想?我看你是脑袋被驴踢了,没看到苹果总数是未知的么,你怎么知道什么时候改向上取整,什么时候该向下取整?别跟我说用if判断啊,你怎么判断?除了用round()函数,你还有什么方法?既然用到round()函数,当然要考虑到所有情况。不会解答,别JB瞎扯淡!按照你的方法,你倒是把你的代码贴出来,还有脸说策略,策略谁不会呀!关键得实现出来。你说的那些到最后没法实现,还不跟放屁一样!
你连我说的方法看都看不明白,没什么讨论价值。呵呵。真不知道一群人为什么能为一个不是题目的题目还研究个半天。
如果就是按照权值分配,那就相当于除法,只不过会有小数。
两个结果的小数部分相比较,大的往上取1,小的向下取0就可以。至于相等的情况,可以考虑权值大的向上取,当然,这只是一种策略而已。
你是大学生思想?我看你是脑袋被驴踢了,没看到苹果总数是未知的么,你怎么知道什么时候改向上取整,什么时候该向下取整?别跟我说用if判断啊,你怎么判断?除了用round()函数,你还有什么方法?既然用到round()函数,当然要考虑到所有情况。不会解答,别JB瞎扯淡!按照你的方法,你倒是把你的代码贴出来,还有脸说策略,策略谁不会呀!关键得实现出来。你说的那些到最后没法实现,还不跟放屁一样!
你连我说的方法看都看不明白,没什么讨论价值。呵呵。真不知道一群人为什么能为一个不是题目的题目还研究个半天。
因为好多人发现终于一个自己看起来会的题目了。所以舍不得放过...
还误差最小呢,难道没看出来你那经过下面两句的赋值以后,
apple_a = app_a;
apple_b = app_b;
apple_a和app_a,apple_b和app_b是永远相等的,你最后来一个if...else判断是干嘛用的?
永远执行apple_a++; 也就是说a的苹果总是多一个。
这个,我用的C语言,实型给整型赋值的时候,应该是会把小数部分舍去的。我是这个意思。
实际上是行不通的,赋值是赋值,类型转换是类型转换,二者不能混谈,不是赋值就顺便把类型也转换了,要不然还要强制类型转换干吗?
如果就是按照权值分配,那就相当于除法,只不过会有小数。
两个结果的小数部分相比较,大的往上取1,小的向下取0就可以。至于相等的情况,可以考虑权值大的向上取,当然,这只是一种策略而已。
你是大学生思想?我看你是脑袋被驴踢了,没看到苹果总数是未知的么,你怎么知道什么时候改向上取整,什么时候该向下取整?别跟我说用if判断啊,你怎么判断?除了用round()函数,你还有什么方法?既然用到round()函数,当然要考虑到所有情况。不会解答,别JB瞎扯淡!按照你的方法,你倒是把你的代码贴出来,还有脸说策略,策略谁不会呀!关键得实现出来。你说的那些到最后没法实现,还不跟放屁一样!
你连我说的方法看都看不明白,没什么讨论价值。呵呵。真不知道一群人为什么能为一个不是题目的题目还研究个半天。算了,不是一个世界的人,没法交流。