保留指定位小数的方法:
引入<iomanip>库,
cout.setf(ios::fixed); //是指以固定的浮点显示
cout.precision(1); //指定精确到小数点后几位
cout<<Grade<<endl;
当setf.(ios::fixed)和precision(n)两个一起用时就表示保留n位小数输出。这里还要注意,每次输出只要设置一次就行了,因为这两个的作用范围是后续对象,而不是仅对后一个对象起作用。
#include <iomanip>
#include<iostream>
#include<cstdio>
using namespace std;
//日期差值数据结构
// int yy[2][12]={ //每月天数
// {31,28,31,30,31,30,31,31,30,31,30,31},
// {31,29,31,30,31,30,31,31,30,31,30,31}
// };
// bool isrun(int year){ //判断闰年
// return ((year%4==0&&year%100!=0)||year%400==0);
// }
// int rundays(int year){ //对应天数
// if(isrun(year))return 366;
// else return 365;
// }
// bool compare(int year1,int month1,int day1,int year2,int month2,int day2){ //比较日期前后
// if(year1>year2||(year1==year2&&month1>month2)||(year1==year2&&month1==month2&&day1>day2))
// return false;
// else return true;
// }
//求绝对值
int absolute(float a,float b){
if(a - b >= 0){
return a - b;
}else {
return b - a;
}
}
int main(){
//日期差值
// char s1[9],s2[9];
// int year1,month1,day1,year2,month2,day2;
// while(cin>>s1>>s2){
// int number=1; //数据处理(直接用int做除法应该更简单)
// year1=(s1[0]-'0')*1000+(s1[1]-'0')*100+(s1[2]-'0')*10+(s1[3]-'0');
// month1=(s1[4]-'0')*10+(s1[5]-'0');
// day1=(s1[6]-'0')*10+(s1[7]-'0');
// year2=(s2[0]-'0')*1000+(s2[1]-'0')*100+(s2[2]-'0')*10+(s2[3]-'0');
// month2=(s2[4]-'0')*10+(s2[5]-'0');
// day2=(s2[6]-'0')*10+(s2[7]-'0');
// if(!compare(year1,month1,day1,year2,month2,day2)) { //较小日期放到前面
// int t;
// t=year1;
// year1=year2;
// year2=t;
// t=month1;
// month1=month2;
// month2=t;
// t=day1;
// day1=day2;
// day2=t;
// }
// //分情况从第一个日期开始累计
// if(year1!=year2){ //不同年
// int run=isrun(year1);
// number+=yy[run][month1-1]-day1;
// while(month1<12)number+=yy[run][month1++];
// year1++;
// while(year1<year2){
// number+=rundays(year1++);
// }
// run=isrun(year2);
// while(month2>1)number+=yy[run][(month2--)-2];
// number+=day2;
// }
// else if(month1!=month2){ //同年不同月
// int run=isrun(year1);
// number+=yy[run][month1-1]-day1;
// while(month1+1<month2)number+=yy[run][month1++];
// number+=day2;
// }
// else number+=(day2-day1); //同年同月不同日
// cout<<number<<endl;
// }
// 剩下的树
//本题关键是判断后续输入区间是否重合,用bool类型数组判断
// const int Grade = 10001;
// bool array[Grade];
// int L,N,num,left,right;
// cin >> L >> N;
// for(int i = 0;i <= L;i++){
// array[i] = true;
// }
// num = L + 1;
// while(N--){
// cin >> left >> right;
// for(int i = left;i <= right;i++){
// if(array[i]){
// array[i] = false;
// num --;
// }
// }
// }
// cout << num;
//手机键盘
//因为有的按键有三个字母,有的按键有四个字母,不好用某个函数,所以要对其进行预处理
//对要输入的每个字母按键次数进行预处理
//通过在同一按键上的字母的差值等于对应的tap的差值判断两字母是否在同一按键上
// //例如:c - a = 3 - 1; d - a != 1 - 1
// int keyboardtap[26] = {1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 4};
// string str;
// while(cin >> str){
// int time = 0;//记录每个字符串所需时间
// for(int i = 0;i<str.size();++i){
// time += keyboardtap[str[i] - 'a'];
// if(i != 0 && str[i] - str[i -1] == //判断当前字母是否与上一个字母在同一按键上
// keyboardtap[str[i] - 'a'] - keyboardtap[str[i - 1] - 'a']){
// time += 2;
// }
// }
// cout << time << endl;
// }
//XXX定律
// int n;
// while(cin >> n){
// int step = 0;
// if(n == 0){break;}
// while(n != 1){
// if(n % 2 == 0){
// n /= 2;
// step++;
// }else{
// n = (n * 3 + 1) / 2;
// step++;
// }
// }
// cout << step << endl;
// }
//Grading
float P,T,G1,G2,G3,Gj;
float Grade;
while(cin >> P >> T >> G1 >> G2 >> G3 >> Gj){
if(absolute(G1,G2) <= T){
Grade = (G1 + G2)/2;
}else{
if(absolute(G3, G1) <= T && absolute(G3,G2) <= T){
Grade = G1;
if(Grade < G2){
Grade = G2;
}
if(Grade < G3){
Grade = G3;
}
}else if(absolute(G3, G1) >= T && absolute(G3,G2) >= T){
Grade = Gj;
}else{
if(absolute(G3, G1) < absolute(G3,G2) <= T){
Grade = (G3 + G1)/2;
}else{
Grade = (G3 + G2)/2;
}
}
}
cout.setf(ios::fixed);
cout.precision(1);
cout<<Grade<<endl;
}
}