C++算法求解 求最后总分 10C

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个也能不足)

4个回答

MyStruct a[10]={{1,100},{2,300},{3,300}}
300 400 0
再解释一下怎么分配的

MyStruct a[10]={{1,100},{1,300},{2,300}}
150 550 0
用正常人能看懂的话解释一下

JonathanYan
JonathanYan 回复ty23615678: 按比例分配就行
一年多之前 回复
JonathanYan
JonathanYan 假设有 A{ 1, 100 } B{ 1, 200 } C{ 2, 210 } D{ 3, 420 } 由于A.beans + B.beans > C.beans,A.beans + B.beans < D.beans,将C的所有豆豆和D的(A.beans + B.beans)个豆豆按比分配给A,B,得到 A{ 1, 170 } B{ 1, 340 } C{ 2, 0 } D{ 3, 420 } (1) A{ 1, 270 } B{ 1, 540 } C{ 2, 0 } D{ 3, 120 } (2) 由于C.beans( 210 ) > D.beansLast( 120 ) 因此将D的所有豆豆分给C,得 A{ 1, 270 } B{ 1, 540 } C{ 2, 120 } D{ 3, 0 } (3)
一年多之前 回复
phenix2009
白色一大坨 回复ty23615678: 真有需要的话加点分,给你写写
一年多之前 回复
phenix2009
白色一大坨 回复phenix2009: 四六五六一七七二七,加企鹅了解一下
一年多之前 回复
phenix2009
白色一大坨 加到50分我可以考虑给你写一下你看看吧
一年多之前 回复
phenix2009
白色一大坨 回复ty23615678: 有点麻烦,10分估计没人给你写
一年多之前 回复
ty23615678
ty23615678 ty23615678 2018.08.16 12:53 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, 如何保证公平分配? 就我上面说的

你这算法描述不是一般的乱,我感觉都可以算是另外一种语言了

ty23615678
ty23615678 回复phenix2009: 就是根据排名获得总分, 并受到beansUsed制约;遵守 公平原则 分配
一年多之前 回复
phenix2009
白色一大坨 我觉得你与其问问题,是不是先把自己的语言表达能力提高一下?
一年多之前 回复

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平分 对吧?
那现在由于每人使用的豆豆也不一样了,如何保证公平分配呢?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问