目录
[P8823 [传智杯 #3 初赛] 期末考试成绩](#3 初赛] 期末考试成绩)
[P8828 [传智杯 #3 练习赛] 直角三角形](#3 练习赛] 直角三角形)
[P8833 [传智杯 #3 决赛] 课程](#3 决赛] 课程)
[P8840 [传智杯 #4 初赛] 报告赋分](#4 初赛] 报告赋分)
[B3913 [语言月赛 202401] 装满葡萄汁的酒杯](#B3913 [语言月赛 202401] 装满葡萄汁的酒杯)
P8823 [传智杯 #3 初赛] 期末考试成绩
题目描述
传智专修学院的 Java 程序设计课程的评价体系是这样的:
首先,所有学生会有一个卷面得分,这个得分一定是一个[0,100] 之间的整数。
如果卷面得分在 90 分及以上,那么他的 GPA(加权平均成绩) 就是满分 4.04.0。
如果卷面得分在 60∼89 之间,那么他每比 9090 分少 11 分,那么他的分数就会在 4.04.0 的基础上减少 0.1。
如果卷面得分不到 60分,那么善良的老师会给他照顾。具体来说,如果他的分数为 x,那么老师会把他的分数调整为 *10 (向下取整) ,再计算他的 GPA。
如果经过调整该学生的得分依旧没满 60 ,那么他就挂科了,GPA 就是 0 分。
现在给你一个人的期末卷面得分,请你输出他的最终 GPA
输入格式
一行一个整数 x,表示该人的期末得分。
输出格式
一个小数点后只有一位的浮点数,表示该同学获得的GPA。
请注意,如果有.0 请保留。
输入输出样例
输入 #1复制99
输出 #1复制4.0
输入 #2复制88
输出 #2复制3.8
输入 #3复制12
输出 #3复制0.0
说明/提示
对于 20%的数据,满足 90≤x≤100;
对于额外 30% 的数据,满足 60≤≤x≤100;
对于 100% 的数据,满足 0≤x≤100。
代码
cpp
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int num,num2;
double gpa;
cin>>num;
if(num>=90)gpa=4;
if(num>=60&&num<90)
{
gpa=4-(90-num)*0.1;
}
if(num<60)
{
num2=pow(num,0.5)*10;
if(num2<60)gpa=0.0;
else
gpa=4-(90-num2)*0.1;
}
printf("%0.1lf",gpa);
return 0;
}
P8828 [传智杯 #3 练习赛] 直角三角形
题目描述
一个直角三角形的两个直角边是 a,b(a≤b),其斜边是 c,且a,b,c 都是正整数。
现在我们已经知道了斜边长度 c,请问这个直角三角形的两个直角边的长度是什么?
输入格式
输入一个整数 c(1≤c≤1.41×104)。
输出格式
输出两个整数 a,b 表示答案。保证有整数解。如果有多个可能的答案,请确保 a 尽可能的小。
输入输出样例
输入 #15
输出 #13 4
代码
cs
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,c,zhengshu=0;
double b=0,xiaoshu=0;
cin>>c;
for(a=1;a<c;a++)
{
zhengshu=sqrt(c*c-a*a);
b=sqrt(c*c-a*a);
xiaoshu=b-zhengshu;
if(xiaoshu==0)break;
}
cout<<a<<' '<<b<<endl;
return 0;
}
P8833 [传智杯 #3 决赛] 课程
题目背景
disangan233 喜欢数数,于是他想让你帮他回答一个问题。
题目描述
传智专修学院提供 A,B 两个课程,分别有n,m 个学生报名。报名 A 的学生的编号为,报名 B 的学生的编号为 ,求有多少个学生同时报名了两个课程。
对于所有数据n,m,,≤20,保证每个课程报名的学生编号不会重复。
输入格式
输入共 3行。
第 1 行输入 2个正整数 n,m。
第 2 行输入 n 个正整数 ...,表示报名课程 A 的学生编号。
第 3 行输入m 个正整数 ...,表示报名课程 B 的学生编号。
学生编号不保证从小到大排序。
输出格式
输出共 1 行 1个整数,表示答案。
输入输出样例
输入 #1
5 5
1 2 3 4 5
1 3 4 5 6
输出 #14
样例解释
我们发现,1,3,4,5这 4名学生同时报名了两门课程,所以答案是 4。
代码
cpp
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n,m,num=0;
cin>>n>>m;
vector <int>arrA(n);
vector <int>arrB(m);
for(int i=0;i<n;i++)cin>>arrA[i];
for(int i=0;i<m;i++)
{
cin>>arrB[i];
for(int j=0;j<n;j++)
{
if(arrB[i]==arrA[j])num++;
}
}
cout<<num<<endl;
return 0;
}
P8840 [传智杯 #4 初赛] 报告赋分
题目描述
花栗鼠科技大学的计算机组成原理实验最终的结课考核方式是提交一份报告。
然而作为任课老师,萝老师不希望大家过于内卷,所以指定了如下规定:
每份报告有一个卷面基础分 a。
在此基础上:
-
若是报告字数低于 16 页,则扣 10 分,如果分数低于 0 分了,则记作 0 分。
-
若是报告字数超过 20 页,每超过 1 页扣 1 分 ,直到分数扣到 0 分为止。
现在你知道了一份报告的卷面基础分 a 和它的页数 p ,请你计算这份报告的最终得分。我们保证 1≤a≤100,1≤p≤50.
输入格式
本题有多组数据。
第一行一个整数 T(1≤T≤1000) ,表示数据组数。
接下来 T 行,每行两个整数a,p,意义如题所示。
输出格式
共 T 行,每行一个整数,表示该次询问的数据最终的得分。
输入输出样例
输入 #1
2
70 17
80 10
输出 #1
70
70
代码
cpp
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int T;
cin>>T;
int arr[T][2]={0};
vector <int>sore(T);
for(int i=0;i<T;i++)
{
cin>>arr[i][0]>>arr[i][1];
}
for(int i=0;i<T;i++)
{
if(arr[i][1]<16)
sore[i]=arr[i][0]-10;
else if(arr[i][1]>=16&&arr[i][1]<=20)
sore[i]=arr[i][0];
else
sore[i]=arr[i][0]-arr[i][1]+20;
}
for(int i=0;i<T;i++)
{
if(sore[i]<0)sore[i]=0;
cout<<sore[i]<<endl;
}
return 0;
}
B3913 [语言月赛 202401] 装满葡萄汁的酒杯
题目描述
小 H 有五个酒杯可供选择,它们的容量分别为 100mL、150mL、300mL、400mL和 1000mL。
现在,小 H 想要在这五个酒杯中选择一个来喝葡萄汁。小 H 打算喝 a mL(a≤1000) 的葡萄汁。请问,小 H 至少需要选择多大容量的酒杯,才能装下 a mL 的葡萄汁(葡萄汁不能溢出)。
输入格式
输入一行共一个整数 a,表示小 H 打算喝的葡萄汁的量(以 mL 为单位)。
输出格式
输出一行共一个整数,表示小 H 至少需要选择的酒杯容量(以 mL 为单位),以确保能够装下 a mL 的葡萄汁。
输入输出样例
输入 #150
输出 #1100
输入 #2112
输出 #2150
输入 #3300
输出 #3300
样例解释 #1
如果要装 50 mL 的葡萄汁,那么用 100 mL 的酒杯就可以了。
数据规模与约定
对于 100% 的数据,满足 1≤a≤1000。
代码
cpp
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector <int>capacity(5);
capacity[0]=100;capacity[1]=150;capacity[2]=300;
capacity[3]=400;capacity[4]=1000;
int a=0;
cin>>a;
if(capacity[0]>=a)cout<<capacity[0]<<endl;
for(int i=1;i<5;i++)
{
if(capacity[i-1]<a&&capacity[i]>=a)
{
cout<<capacity[i];
break;
}
}
return 0;
}