列表

详情


NC200473. 电脑磨损程度

描述

我们每次使用电脑都是会操成一些电脑磨损的,根据ACM协会研究表明,计算机开机后并连续工作4个小时以内会磨损10个单位的磨损(提示:0-4);接下来的4个小时(提示:4-8),每小时会造成2个单位的磨损;之后每小时会造成2.4个单位的磨损(提示:8-正无穷)。电脑最后使用时间既使不到1小时,也当作1小时计算磨损程度。(可以通过重启来结束连续工作,连续工作时间将清零)
一个参赛者可以根据计算机使用总时长合理安排时间,来让电脑的磨损程度降到最低。
例如,整个使用时间为16小时,使用者应该将使用时间分成长度相同的两部分,即在连续使用八小时时进行重启,每部分磨损18个单位,总共磨损了36个单位。如果电脑一直使用,则耗费37.2个单位。。
现在给你整个电脑的使用时间,请你计算使用电脑的最小磨损程度。

输入描述

输入包含多组测试数据。每组输入一个正整数n(n<10000000),表示整个电脑使用时间。

当n=0时,输入结束。

输出描述

对于每组输入,输出最小花费。如果需要的话,保留一位小数。

示例1

输入:

3
9
16
0

输出:

10
20.4
36

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 4ms, 内存消耗: 376K, 提交时间: 2019-12-21 15:56:31

#include<stdio.h>
int main()
{
	int i=0,j=0,k=0;
	int n=0;
	double num=0;
	while(~scanf("%d",&n))
	{
		if(n==0)
		break;
		else
		{
			if(n<=4)
			num=10;
			if(n>4&&n<=8)
			num=(n-4)*2+10;
			if(n>8&&n-(n/8*8)<=5)
			num=n/8*18+(n-(n/8*8))*2.4;
			if(n>8&&n-(n/8*8)>=6)
			num=n/8*18+10+(n-(n/8*8)-4)*2;
			if((int)num==num)
			printf("%.0lf\n",num);
			else
			printf("%.1lf\n",num);
		}
		num=0;
	}
	return 0;
 } 

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 356K, 提交时间: 2019-12-21 15:01:34

#pragma GCC optimize(2)
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n;
double res;
signed main(){
	while(cin>>n,n){
		if(n<=4){puts("10"); continue;}
		if(n<=8){printf("%d\n",10+2*(n-4)); continue;}
		int k=n/8,m=n%8;
		if(m>=5)	res=k*18+10+(m-4)*2,printf("%.0lf\n",res);
		else{
			res=k*18+2.4*m;
			if(m)	printf("%.1lf\n",res);
			else	printf("%.0lf\n",res);
		}
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 2ms, 内存消耗: 484K, 提交时间: 2019-12-21 15:29:02

#include <stdio.h>

int main()
{
	int n;
	double cost;
	while(1)
	{
		scanf("%d",&n);
		cost=0;
		if(n==0)return 0;
		cost+=(n/8)*18;
		n%=8;
		if(n<=4&&cost==0)cost=10;
		else if(n<=4)cost+=2.4*n;
		else cost+=10+(n-4)*2;
		if((int)(cost*10)%10!=0)printf("%.1f\n",cost);
		else printf("%.0f\n",cost);
	}
}

上一题