typedef struct
{
int num; //排名
int beansUsed; //使用豆豆
...
int score==0; //得分 总分
} MyStruct;
MyStruct a[10]={{1,100},{2,300},{3,300}}
输出所有元素的score成员 (总分)
300
400
0
有可能会出现名次相同的情况如
MyStruct a[10]={{1,100},{1,300},{2,300}}
150
550
0
名次相同则平分后面玩家(注意使用豆豆的数量),a[0]与a[1]名次相同,但只有100,所以只能分得(a[2]的50);因为a[1]使用了300,所以除去刚在a[2]的100(被a[0],a[1]平分)
剩下的200也是他的,所有总共从a[2]那获得50+200,加上自己的300 就是550;如果a[2]=(2,200})只有200 ,那么就是50+100+300
再看一个
MyStruct a[10]={{1,100},{1,300},{2,200},{3,600},{4,80}}
a[0]与a[1]名次相同,平分a[2]的100 ,a[3]的100 ,a[4]的80
所以a[0]总分 50+50+40 再加自己的100 = 240
a[1]除了和a[0]平分140以外, 另外多使用的200豆豆 额外可以再从a[2],a[3]获得 100 (a[2]只剩100了) 和200
a[1]总分50+50+40 +100(自己) 100(从a[2]获得)+200(从a[3]获得) +200(自己) = 740
a[2]总分0
a[3]总分300 (扣除后剩下的)
a[4]总分0
请教下 这个算法如何用C++表示
(元素数组里面有多少元素不知道,可能有10个也能不足)
你这算法描述不是一般的乱,我感觉都可以算是另外一种语言了
MyStruct a[10]={{1,100},{2,300},{3,300}}
300 400 0
再解释一下怎么分配的
MyStruct a[10]={{1,100},{1,300},{2,300}}
150 550 0
用正常人能看懂的话解释一下
a[0]第一名对吧, 那么他就赢得a[1] 和a[2]的 ,分别从a[1] 和a[2] 赢得多少呢? 原则就是不能超过投入的豆豆 (也就是最多获得100);所有第一步算下来就是
a[0] 300
a[1] 剩 200
a[2] 剩 200;
然后开始计算a[1] ,他第二名,名次胜过a[2], 所以赢得a[2] 的200 ,最后
a[1]400
a[2] 0
名次相同时开始复杂些,但是也是本着公平分配原则
{{1,100},{1,300},{2,300}}
a[0] 和a[1]都是第一名 ,所以瓜分了a[2] ,如果a[1] 不在,a[0] 瓜分a[2]的100,但是现在a[1] 也在,所以只能得到50 ,(平分 每人50)
a[1] 和a[2] 使用了相同的豆豆,所以a[1] 赢得 a[2]目前 所有的
就好比三个人玩剪刀石头布,A,B出剪刀 C出布,如果每人使用100豆豆,那么C的100给A,B平分 对吧?
那现在由于每人使用的豆豆也不一样了,如何保证公平分配呢?
就好比三个人玩剪刀石头布,A,B出剪刀 C出布,如果每人使用100豆豆,那么C的100给A,B平分 ,每人获得50
同样,A,B出剪刀 C出布, 但是A100 , B200 ,C 200, 如何保证公平分配? 就我上面说的