P8839 [传智杯 #4 初赛] 组原成绩
题目描述
花栗鼠科技大学(Hualishu University of Science and Technology, HUST)的计算机组成原理快要出分了。你现在需要计算你的组原成绩如何构成。
具体来说,组原成绩分为三部分,分别是平时出勤 t ,作业 ℎ和考试 e 。总成绩 w 由如下公式计算:
w=t×20%+h×30%+e×50%
其中我们保证 0≤h,e,t≤100
现在你知道了你的组原考试的t,h,e ,你希望计算你的总成绩。
由于教务系统的特殊性,最终成绩只能是整数,采取 直接去掉小数部分 的办法。
输入格式
一行三个整数,表示 t,h,e
输出格式
一行一个整数,为 w
输入输出样例
输入 #1 50 100 100
输出 #1 90
代码
#include<iostream>
using namespace std;
int main()
{
int t,h,e;
cin>>t>>h>>e;
int w;
w=t*0.2+h*0.3+e*0.5;
cout<<w<<endl;
return 0;
}
P8841 [传智杯 #4 初赛] 竞争得分
题目描述
为了鼓励大家写出更好的作业,花栗鼠科技大学(Hualishu University of Science and Technology, HUST)的组原实验采用了竞争得分的方式。
具体来说,假设有 n 个人提交了作业,并且其中原始得分最低的人记作 ,原始得分最高的人记作 ,第 i 个人的原始得分为 ,那么第 i 个人的得分就是:
由于成绩系统的问题,最终录入的成绩只能是整数,采用直接去掉小数部分的方法。
输入格式
第一行一个整数 n 表示人数。(1≤n≤1000)
第二行共n 个整数,为序列 a ,其中 表示第 i 个人的原始作业得分。(1≤≤1000)
输出格式
一行,共 n 个整数,表示经过更新后每个人的得分。
输入输出样例
输入 #1
3
1 2 3
输出 #1
0 50 100
代码
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,amax=0,amin=100000000;
cin>>n;
vector <int>arr(n);
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
for(int i=0;i<n;i++)
{
amax=(amax>arr[i])?amax:arr[i];
amin=(amin<arr[i])?amin:arr[i];
}
int t=amax-amin;
for(int i=0;i<n;i++)
{
arr[i]=((arr[i]-amin)*100)/t;
if(arr[i]<0)arr[i]=0;
}
for(int i=0;i<n;i++)cout<<arr[i]<<' ';
return 0;
}
P8822 [传智杯 #3 初赛] 课程报名
题目描述
传智播客推出了一款课程,并进行了一次促销活动。具体来说就是,课程的初始定价为 v 元;每报名 m 个学员,课程的定价就要提升 a 元。由于课程能够容纳的学生有限,因此报名到 n 人的时候就停止报名。
现在老师想知道,当课程停止报名时,一共可以获得多少学费呢?
输入格式
一行四个使用空格隔开的整数,分别为 n,v,m,a。
输出格式
一行一个整数,表示答案。
输入输出样例
输入 #1 5 1 1 1
输出 #1 15
说明/提示
样例解释
每卖出 1个课程,价格就会提高 1元,所以总共获得 1+2+3+4+5=15 元。
数据规模与约定
对于 50% 的数据,满足 1≤n,m,v,a≤10;
对于额外 20%的数据,满足 a=0;
对于 100% 的数据,满足 0≤n,m,v,a≤1000。
然而,由于本次比赛是 ACM 赛制,因此您必须通过 100%的数据才能够获得本题的得分,后题同。
代码
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,v,m,a,num=0;
cin>>n>>v>>m>>a;
vector <int>arr(n);
for(int i=0,t=1;i<n;i++,t++)
{
arr[i]=v;
if(t%m==0)v+=a;
}
for(int i=0;i<n;i++)
{
num+=arr[i];
}
cout<<num;
return 0;
}
P8829 [传智杯 #3 练习赛] 单位转换
题目描述
我们知道计算机的大小单位有 B, KB, MB 等,现在请你编写一个计算器进行大小单位换算。
提示,1 GB = MB = KB = B。
输入格式
输入一个字符串,由一个 0 到 1023 之间的整数,一个单位名称(大写字母),一个等于号和问号,以及第二个单位名称。
单位只有可能是 GB
,MB
,KB
,B
之间的一个。
输出格式
输出一个数字,精确到小数点后 6 位。
输入输出样例
输入 #1 128MB=?GB
输出 #1 0.125000
输入 #2 64MB=?KB
输出 #2 65536.000000
代码
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int main()
{
int num1;
double num2=0;
string per1;//单位
cin>>num1>>per1;
//GB,MB,KB,B
if(per1[0]=='G'&&per1[4]=='M')num2=num1*pow(2,10);
if(per1[0]=='G'&&per1[4]=='K')num2=num1*pow(2,20);
if(per1[0]=='G'&&per1[4]=='B')num2=num1*pow(2,30);
if(per1[0]=='M'&&per1[4]=='K')num2=num1*pow(2,10);
if(per1[0]=='M'&&per1[4]=='B')num2=num1*pow(2,20);
if(per1[0]=='K'&&per1[4]=='B')num2=num1*pow(2,10);
if(per1[0]=='B'&&per1[3]=='K')num2=num1/pow(2,10);
if(per1[0]=='B'&&per1[3]=='M')num2=num1/pow(2,20);
if(per1[0]=='B'&&per1[3]=='G')num2=num1/pow(2,30);
if(per1[0]=='K'&&per1[4]=='M')num2=num1/pow(2,10);
if(per1[0]=='K'&&per1[4]=='G')num2=num1/pow(2,20);
if(per1[0]=='M'&&per1[4]=='G')num2=num1/pow(2,10);
if(per1[1]=='B'&&per1[0]==per1[4])num2=num1;
if(per1[1]=='B'&&per1[0]==per1[3])num2=num1;
printf("%0.6lf\n",num2);
return 0;
}