牛子爷退位

题目描述:牛子爷想把牛子俱乐部老大的位置让给别人,自己去以空出更多时间去内卷,有三名候选人参加的选举,第一名候选人获得a票,第二名候选人获得b票,第三名候选人获得c票。对于每个候选人,解决以下问题:该候选人还需要得多少选票才能赢得选举(即该候选人的票数严格大于任何其他候选人的票数)?
请注意,对于每个候选人,有必要独立解决此问题,即任何候选人的新增投票数不会影响获得其他两名候选人答案时的计算。

输入:第一行包含一个整数t(1≤T≤104)-测试用例的数量。然后,t测试用例随之出现。
每个测试用例由一行组成,其中包含三个整数a、b和c(0≤a、 b,c≤109)

输出:对于每个测试用例,在单独的行中输出三个整数A、B和C(A、B、C≥0)用空格分隔-分别为第一个、第二个和第三个候选问题的答案。

样例输入

5
0 0 0
10 75 15
13 13 17
1000 0 0
0 1000000000 0

 样例输出

1 1 1
66 0 61
5 5 0
0 1001 1001
1000000001 0 1000000001		

思路:循环找出最大值,再循环三个数,若为等于最大值,则 输出0,若不是最大值,则输出最大值与值的差+1,这里+1的原因是因为题目要求超过最大值。

注意!!!要考虑多个最大值的情况,此时遇到最大值时候,不输出0,而是输出1。不为最大值的时候与之前的情况相同,因为每个数据都是独立的,因此当前值只要大于最大值即可。

代码实现:

#include<stdio.h>
int main()
{    int T,a[100],max,i,b[100];

     scanf("%d",&T);
     while(T--)
     {    int cnt=0;
         scanf("%d%d%d",&a[0],&a[1],&a[2]);
          if(a[0]==a[1]&&a[1]==a[2]){printf("1 1 1\n");continue;} //如果三个值一样的话,即任意一个数+1就可以获胜

         max=a[0];
         for(i=1;i<3;i++)
           if(a[i]>max)max=a[i];

           for(i=0;i<3;i++)
           {    if(a[i]==max){b[i]=0;cnt++;}
               else b[i]=max-a[i]+1;

           }
           if(cnt>1)for(i=0;i<3;i++)   //判断是否存在多个最大值的情况
                     if(a[i]==max)b[i]+=1; //如果是最大值就输出1,不是的话就与第一种情况相同
           for(i=0;i<3;i++)
                printf("%d ",b[i]);
           printf("\n");
     }
     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值