第一题
201612-1
试题名称: 中间数
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> num;
int x;
for(int i=0;i<n;i++) {
cin>>x;
num.push_back(x);
}
sort(num.begin(),num.end());
int flag=0;
int m;
for(int i=0;i<n;i++)
{
int left=i;
int right=n-i-1;
int j=i-1;
while(j>0&&num[j]==num[i]){
left--;
j--;
}
j=i+1;
while(j<n&&num[j]==num[i]){
right--;
j++;
}
if(right==left) {
flag=1;
m=num[i];
break;
}
}
if(flag==1) cout<<m;
else cout<<"-1";
return 0;
}
第二题
201612-2
试题名称: 工资计算
#include <bits/stdc++.h>
using namespace std;
int main()
{
int salary[]={3500,3500+1500,3500+4500,3500+9000,3500+35000,3500+55000,3500+80000};
int rate[]={3,10,20,25,30,35,45};
const int len=sizeof(salary)/sizeof(int);
int range[len];
range[0]=salary[0];
for(int i=1;i<len;i++){
range[i]=range[i-1]+(salary[i]-salary[i-1])-(salary[i]-salary[i-1])*rate[i-1]/100;
//range是税后的不同阶梯
}
int t;
int s;
cin>>t;
int i;
for( i=0;i<len;i++){
if(t<=range[i]) break;
}
if(i==0) s=t;
else {
s=salary[i-1]+(t-range[i-1])*100/(100-rate[i-1]);
//税前收入等于:到满段的税前收入+当前段税收收去了多少
}
cout<<s;
return 0;
}
程序说明:
商业应用开发中,是不允许出现任何金额计算错误的,误差也是不允许的。导致金额误差有多种原因,其中,使用浮点变量是常见的一种,一点要避免使用浮点类型变量,确保金额相关的计算准确无误。
引用了海岛大佬的博文
学到
1.慎用浮点类型的变量
2.查表思维