题目链接:https://ac.nowcoder.com/acm/contest/19304/U
题目描述
“这个比赛,归根结底就是控制一个虚拟的小拖拉机跑完整个赛道。一般一场比赛会有 9 个到 13 个赛道,最后看能跑完多少个赛道。”
通常在一场可编程拖拉机比赛中,分别会有实际参赛队伍数 10%、20%、30% 向下取整的队伍获得金、银、铜牌,其余队伍获得荣誉提名,俗称“铁牌”。
但是主办方往往会多准备一些奖牌,那么在发奖牌的时候会按照比例向上取整发出的奖牌以减少浪费,就会有一些原本获得银牌的队伍获得了金牌。
现在给出一个赛区的规模,也就是这个赛区的实际参赛队伍数,小 Q 同学想知道有多少队伍的奖牌会由银变金、由铜变银、由铁变铜。
输入描述:
输入只有一行,包含一个整数 n (10 <= n <= 1000),表示实际参赛队伍数。
输出描述:
输出一行,包含三个由空格分隔的整数,分别表示奖牌会由银变金、由铜变银、由铁变铜的队伍数。
示例:
输入 115
输出 1 1 2
按照下取整规则只发 11 块金牌的话,第 12 名原本是银牌,但是按照上取整规则发 12 块金牌,第 12 名是金牌,就由银变金了。
关于 向上/下 取整的一些函数
函数名称 | 说明 |
floor() | 不大于自变量的最大整数 |
ceil() | 不小于自变量的最小整数 |
round() | 四舍五入到最邻近的整数 |
fix() | 朝零方向取整 |
代码:
#include<bits/stdc++.h>
using namespace std;
int cha(int x,int y) { return (y-x);}//求两数之差(x2>=x1),所以不用加abs绝对值函数
int main()
{
int n;
cin>>n;
int a1=floor(0.1*n),b1=floor(0.2*n),c1=floor(0.3*n); //x1代表向上取整的牌子数
int a2=ceil(0.1*n),b2=ceil(0.2*n),c2=ceil(0.3*n); //x2代表向下取整后的牌子数
cout<<cha(a1,a2)<<" "<<cha(b1,b2)+cha(a1,a2)<<" "<<cha(c1,c2)+cha(b1,b2)+cha(a1,a2);
//输出结果
return 0;
}
大家有什么意见和建议一起讨论和交流!