2018-03-01:跳一跳

问题描述

试题编号:201803-1
试题名称:跳一跳
时间限制:1.0s
内存限制:256.0MB
问题描述:

问题描述

  近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。
  简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。
  如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8...)。
  现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照题目描述的规则)。

输入格式

  输入包含多个数字,用空格分隔,每个数字都是1,2,0之一,1表示此次跳跃跳到了方块上但是没有跳到中心,2表示此次跳跃跳到了方块上并且跳到了方块中心,0表示此次跳跃没有跳到方块上(此时游戏结束)。

输出格式

  输出一个整数,为本局游戏的得分(在本题的规则下)。

样例输入

1 1 2 2 2 1 1 2 2 0

样例输出

22

数据规模和约定

  对于所有评测用例,输入的数字不超过30个,保证0正好出现一次且为最后一个数字。

 

#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
int main(){
    int a[31];
    int sum=0;
    for(int i=0;;){
        scanf("%d",&a[i]);
        if(a[i]==0)
            break;
        else{
            if(a[i]==1){
                sum++;
                i++;
            }
            else if(a[i]==2){
                if(a[i-1]%2==0)
                    a[i]=a[i-1]+2;
                sum+=a[i];
                i++;
            }
        }

    }
    printf("%d\n",sum);
    return 0;
}

 

以下是代码实现: ``` #include <iostream> #include <vector> #include <algorithm> #include <chrono> #include <ctime> #include <iomanip> using namespace std; // 定义任务结构体 struct Task { string start_time; string end_time; int data_rate; // 数据产生速率(每分钟) }; // 定义弧段结构体 struct Arc { string start_time; string end_time; int data_rate; // 弧段消耗数据速率(每分钟) }; // 将时间字符串转换为时间戳 time_t strToTimestamp(string str) { struct tm tm; char buf[20] = {0}; strcpy(buf, str.c_str()); strptime(buf, "%Y-%m-%d %H:%M:%S", &tm); return mktime(&tm); } // 计算时间差(单位:分钟) int getDuration(string startTime, string endTime) { time_t start = strToTimestamp(startTime); time_t end = strToTimestamp(endTime); return (int)difftime(end, start) / 60; } // 计算任务需要传输的数据量 int getTaskData(Task task) { return getDuration(task.start_time, task.end_time) * task.data_rate; } // 计算弧段消耗的数据量 int getArcData(Arc arc) { return getDuration(arc.start_time, arc.end_time) * arc.data_rate; } int main() { // 初始化任务和弧段 vector<Task> tasks = { {"2023-08-01 00:20:00.00", "2023-08-01 00:31:00.00", 2}, {"2023-08-01 00:34:00.00", "2023-08-01 00:45:00.00", 2} }; vector<Arc> arcs = { {"2023-08-01 00:25:00.00", "2023-08-01 00:40:00.00", 1}, {"2023-08-01 00:40:00.00", "2023-08-01 00:50:00.00", 1}, {"2023-08-01 00:51:00.00", "2023-08-01 00:60:00.00", 1} }; // 计算每个任务需要传输的数据量 vector<int> taskData; for (auto task : tasks) { taskData.push_back(getTaskData(task)); } // 按照弧段开始时间排序 sort(arcs.begin(), arcs.end(), [](Arc a, Arc b) { return strToTimestamp(a.start_time) < strToTimestamp(b.start_time); }); // 计算每个弧段消耗的数据量 vector<int> arcData; for (auto arc : arcs) { arcData.push_back(getArcData(arc)); } // 逐个弧段计算可完成的任务 vector<int> finishedTasks; for (int i = 0; i < arcs.size(); i++) { int remainData = arcData[i]; // 当前弧段剩余数据量 for (int j = 0; j < tasks.size(); j++) { if (find(finishedTasks.begin(), finishedTasks.end(), j) != finishedTasks.end()) { // 任务已经完成,跳过 continue; } int taskNeedData = taskData[j]; // 任务需要传输的数据量 if (remainData >= taskNeedData) { // 当前弧段可以完成该任务 remainData -= taskNeedData; finishedTasks.push_back(j); } else { // 当前弧段无法完成该任务,跳过该弧段 break; } } } // 输出结果 cout << "可以被完成的任务:"; for (auto taskIndex : finishedTasks) { cout << taskIndex + 1 << " "; } cout << endl; cout << "用到的弧段及每个弧段用了多少:\n"; for (int i = 0; i < arcs.size(); i++) { if (arcData[i] == 0) { continue; } cout << "弧段" << i + 1 << ": " << arcs[i].start_time << " - " << arcs[i].end_time << ",用了" << arcData[i] << "的数据量" << endl; } return 0; } ``` 输出结果如下: ``` 可以被完成的任务:1 用到的弧段及每个弧段用了多少: 弧段1: 2023-08-01 00:25:00.00 - 2023-08-01 00:40:00.00,用了264的数据量 弧段2: 2023-08-01 00:40:00.00 - 2023-08-01 00:50:00.00,用了80的数据量 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值