列表

详情


OR120. 游乐园

描述

小明去游乐园玩耍,他的票一共可以玩t分钟。

游乐场一共有n个项目,编号1到n,第i个项目需要a[i]的时间。游乐场规定,在票没有到期前,拥有者都可以入场,无论完成项目出场时该票是否已经过期。

小明可以任意决定玩项目的顺序,但是每个项目他只想玩一次。问小明最长可以玩多久?

输入描述

第一行两个整数n,t,含义如题面,1≤n≤100,1≤t≤10000000;

接下来一行n个整数,第i个整数a[i]表示第i个项目所需的时间,1≤a[i]≤100。

输出描述

输出一个整数,表示小明最长可以玩多久。

示例1

输入:

4 12
5 5 5 5

输出:

15

示例2

输入:

4 20
10 10 10 10

输出:

20

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2020-06-09

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int n, t, k, sum, temp, i, j;
    int a[100];
    
    scanf("%d %d\n", &n, &t);
    
    for(i=0; i<n; i++)
    {
        scanf("%d\n", a+i);
    }
    
    //a[i]递增排序
    for(i=0; i<n-1; i++)
    {
        k = i;
        for(j=i+1; j<n; j++)
        {
            if(a[k]>a[j])
                k = j;
        }
        temp = a[k];
        a[k] = a[i];
        a[i] = temp;
    }
    
    sum = 0;
    for(i=0; i<n; i++)
    {
        if((t-sum) > 0)
            sum += a[i];
        else if((t-sum) == 0)
        {
            sum += a[n-1] - a[0];
            break;
        }
        else
        {
            sum += a[n-1] - a[i-1];
            break;
        }
    }
    printf("%d\n", sum);
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-07-04

#include<stdio.h>
int main()
{
    int n,t,a[100],i,j,k,temp,sum = 0;
    scanf("%d %d",&n,&t);
    for(i = 0; i < n; i++)
    {
        scanf("%d",&a[i]);
    }
    for(i = 0; i < n - 1; i++)
    {
        k = i;
        for(j = i + 1; j < n; j++)
        {
            if(a[k] > a[j])
                k = j;
        }
        temp = a[k];
        a[k] = a[i];
        a[i] = temp;
    }
    for(i = 0; i < n; i++)
    {
        if((t - sum ) > 0)
        {
            sum = sum + a[i];
        }
        if((t - sum) == 0 || (sum > t))
        {
            break;
        }
        if((t - sum) < 0)
        {
            sum = sum + a[n-1];
            break;
        }
    }
    printf("%d",sum);
    return 0;
}

上一题