算法学习-day4

保留指定位小数的方法:

引入<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;
    }
    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值