2021华为秋招软件开发笔试题

题目:
学校有一个在线学习系统,没门课程由N个页面组成(0< N<= 10000)个页面组成,学生从第一页开始按顺序学到最后一页提交学习记录。
系统会记录每页停留的时间(单位秒),当学生提交时会分析时间是否满足要求,分析规则如下:
每分钟(60秒)之内学完的页面不能大于4页。

例如系统记录到某学生页面停留时间如下:
10 120 10 20 10 10 50
该学生第一分钟学完1页,第二分钟学完0页,第三分钟学完5页,第四分钟学完1页,则判定为不满足要求。

输入描述:
输入数据包含多个学生的提交记录,第一行是整数表示记录个数,每个记录占一行,每行的第一个数是N,表示页面数,然后是每个页面的学习时间。
输出描述:
对于每组输入数据,满足输出1,不满足输出0,每组输出占一行。

输入

5
2 10 10
4 10 15 20 30
5 10 10 10 10 10
6 10 20 20 70 10 10
8 10 120 10 10 10 10 10 10

输出

1
1
0
1
0

思路1:
统计每一个自然的分钟中,翻过的页数。如果sum大于60s的话就取余,并且将页数清零;如果sum小于等于60s,则累加页数,大于4的话就返回0。遍历数组之后,返回1。
代码1:

#include <iostream>
#include <vector>
using namespace std;
int process(vector<int> &vec)
{
    
    
    int pages = 0, sum = 0;
    for (auto it:vec) {
    
    
        sum += it;
        if (sum > 60) {
    
    
            sum %= 60;
            pages = 0;
        }
        ++pages;
        if (pages > 4) {
    
    
            return 0;
        }
    }
    return 1;
}
int main()
{
    
    
    int input = 0;
    vector<int> ans;
    cin >> input;
    while (input--) {
    
    
        int n = 0, tmp = 0;
        vector<int> numbers;
        cin >> n;
        for (int i = 0; i < n; ++i) {
    
    
            cin >> tmp;
            numbers.push_back(tmp);
        }
        ans.push_back(process(numbers));
    }
    for (auto it : ans) {
    
    
        cout << it << endl;
    }
    return 0;
}

思路2:

累加处理数组中的每一个数,整除60,然后把这个数放到应该在桶中,
最后遍历数组桶中,如果有一个桶中的值大于4的话则返回0;
否则返回1。

猜你喜欢

转载自blog.csdn.net/qq_35353824/article/details/107544329