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; }