F可编程拖拉机比赛
题目意思:
给你一个数,你要计算这个数的0.1,0.2,0.3(对应分别拿金,银,铜的人数),最后拿总数减去拿这几种牌子的人就是拿铁牌的人
分别向上向下取整值为多少,然后计算每个数的向上向下取整后,根据变化,算多少人的奖牌应该换
题目样例115,这里以115为例:
名称 | 0.1 | 0.2 | 0.3 | 铁 |
---|---|---|---|---|
向下取整 | 11 | 23 | 34 | 115-11-23-34=47 |
向上取整 | 12 | 23 | 35 | 45 |
接下来展示换牌的计算方式
(x[0]为11,y[0]为23,z[0]为34,w[0]为47,w[1]为35,其他类推)
原本按照向下取整发,实际按照向上发
ans1=银->金=x[1]-x[0]
y[1]-y[0]=银牌变化量=银牌增加量-银牌减少量=(铜->银)-(银->金)
ans2=(铜->银)=(银->金)+(y[1]-y[0]);
z[1]-z[0]=铜牌变化量(后面和银牌变化量开始都一样)
或者
ans3=(铁->铜)就是铁牌变化量
终于写完了,上代码
#include<bits/stdc++.h>
using namespace std;
int arr[21],brr[21],crr[21];
int main()
{
int n;
cin>>n;
double n1=n;
//这边存int n,n/10就是直接向下取整
//floor也能直接向下取整(取整得要对浮点型数据才有用,整形没必要)
int x[2]={0,0},y[2]={0,0},z[2]={0,0},w[2]={0,0};
int ans[4];
for(int i=0;i<4;i++)ans[i]=0;
x[0]=n/10;
y[0]=(n*0.2);
z[0]=n*0.3;
w[0]=n-x[0]-y[0]-z[0];
x[1]=ceil(n1/10);
y[1]=ceil(n1*0.2);
z[1]=ceil(n1*0.3);
w[1]=n-x[1]-y[1]-z[1];
ans[0]=fabs(x[1]-x[0]);
ans[1]=fabs(y[1]-y[0]);
ans[2]=fabs(z[1]-z[0]);
ans[3]=fabs(w[1]-w[0]);
// cout<<x[0]<<" "<<x[1]<<endl;
// cout<<y[0]<<" "<<y[1]<<endl;
// cout<<z[0]<<" "<<z[1]<<endl;
// cout<<w[0]<<" "<<w[1]<<endl;
//
// for(int i=0;i<4;i++)cout<<"ans["<<i<<"]="<<ans[i]<<" ";
// cout<<endl;
cout<<ans[0]<<" "<<ans[1]+ans[0]<<" "<<ans[3]<<" ";
return 0;
}