满分600,三道编程,和华子一样。 第一题(100%通过):日期处理题,输入是xxxx年xx月第xx周的周x,要求转换为xxxx-xx-xx标准格式。从2000-01-01开始,要考虑闰年,要考虑非法输入(比如2018年01月第08周的周1,这种肯定就是不对的) //// Created by LJ on 2022/8/16.//#include <iostream>#include <vector>#include <map>#include <stdio.h>using namespace std;vector<int> monthDays{0,31,28,31,30,31,30,31,31,30,31,30,31};vector<int> weekdayFromStart{5,6,7,1,2,3,4};int main(){    // 处理输入    int year, month, week, weekday;    cin >> year >> month >> week >> weekday;    // 数据处理    // year:month:01 到2000-01-01过了多少天    int days = 0;    days += (year-2000) * 365;    // 闰年要考虑进去    for(int y = 2000; y < year; ++y){        if(y % 4 == 0 && y % 100 != 0){ days++; }        else if(y % 400 == 0){ days++; }    }    // 算月的时间    for(int m = 1; m < month; ++m){        days += monthDays[m];    }    // 当年如果是闰年,并且月份大于2月,需要多加一天    if(month > 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)){ days++; }    // 不考虑第几个周的周几,总的时间已经算好了    ++days;//     cout << days << endl; // 打印测试一下    // days / 7 得到余数,表示到year:month:01是星期几    int res = days % 7;//     cout << "res: " << res << endl;    int dayFromYearMonth01 = weekdayFromStart[res];//     cout << "周" << dayFromYearMonth01 << endl;    // 准备输出    int firstWeekdaysCnt = 7-dayFromYearMonth01+1;    if(week == 1){        // 第一个周,需要判断指定的日期,是否在year:month:01之前        if(weekday < dayFromYearMonth01){ cout << 0 << endl;}        else{ printf("%04d-%02d-%02d", year, month, weekday-dayFromYearMonth01+1);}    }    else{        int resWeekdaysCnt = (week-2)*7 + firstWeekdaysCnt + weekday;        // 计算得到的总日期,如果超过了当月的总天数,也是错误的非法数据        if(resWeekdaysCnt > monthDays[month]){            // 还要判断是不是闰年            if(month == 2 && (year % 4 == 0 && year % 100 != 0) || year % 400 == 0){                if(resWeekdaysCnt == 29){                    printf("%04d-%02d-%02d", year, month, resWeekdaysCnt);                }            }            else cout << 0 << endl;        }        else{            printf("%04d-%02d-%02d", year, month, resWeekdaysCnt);        }    }    return 0;}/*** 分析题意: * 将【某年某月第几个周几】转换为【公历日期】 *    - 存在非法数据 *    - 每月的第一周和最后一周一般都不完整 *    - 还要考虑闰年的影响 *    - 起始时间为2000-01-01,时间为周六*/ 第二题:买卖物品(100%通过)简单的离谱。给了两个数组,分别代表商品的***和售卖价,要求最后得到的利润。直接遍历。。。 //// Created by LJ on 2022/8/16.//#include <iostream>#include <vector>#include <string>using namespace std;void s2vec(const string &s1, vector<int> &m){    int num = 0;    for(char ch : s1){        if(ch == ','){            m.push_back(num);            num = 0;        }        else{            num *= 10;            num += ch-'0';        }    }    m.push_back(num);}int main(){    // 输入数据处理    string s1, s2;    cin >> s1 >> s2;    int k;    cin >> k;    vector<int> m, n;    s2vec(s1, m);    s2vec(s2, n);    // 打印测试一下//     for(int i : m){ cout << i << " "; }//     cout << endl;//     for(int i : n){ cout << i << " "; }//     cout << endl;    // 解题    for(int i = 0; i < m.size(); ++i){        if(m[i] < n[i]){            k += n[i]-m[i];        }    }    // 输出    cout << k << endl;    return 0;} 第三题(80%通过):题意:小明要练习超级左旋技巧,输入数据为多组一维数组,对于第i天的小明,如果前面天数的练习中,失误次数小于,技巧值就要加1,否则就减1。相等的话不变。要求输出每一组数据的最大技能获得值,以及最后的技能获得值。(题目有点绕,然后没时间去想优化了。 //// Created by LJ on 2022/8/16.//#include <iostream>#include <vector>#include <string>using namespace std;int main(){    // 处理输入数据    int T;    cin >> T;    vector<vector<int>> trains;    for(int i = 0; i < T; ++i){        int n;        cin >> n;        vector<int> tmp;        for(int j = 0; j < n; ++j){            int a;            cin >> a;            tmp.push_back(a);        }        trains.push_back(tmp);    }    // 打印输出//    for(auto &it : trains){//        for(auto i :it){//            cout << i << " ";//        }//        cout << endl;//    }    // 暴力解题    vector<vector<int>> ans;    for(auto &it : trains){        int maxValue = 0;        int currValue = 0;        for(int i = 1; i < it.size(); ++i){            // 应该尝试用空间换时间,才能跑完所有案例            for(int j = 0; j < i; ++j){                if(it[i] > it[j]){ ++currValue; }                else if(it[i] < it[j]){ --currValue; }            }            maxValue = max(maxValue, currValue);        }        ans.push_back({maxValue, currValue});    }    // 输出    for(auto &it : ans){        for(int i : it){ cout << i << " "; }        cout << endl;    }    return 0;}
点赞 1
评论 9
全部评论

相关推荐

不多说了,看图吧
MomonKa:实际上是,机房机器有些高度,问问你身高,有没有女朋友是看你能不能猛猛加班
你最讨厌面试问你什么?
点赞 评论 收藏
分享
07-29 14:46
门头沟学院 Java
码农索隆:好了,我说句公道话,咱三都辛苦了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务