问题 A: 最终分数
题目描述
陈老师又安排了一场特殊的比赛。比赛一共三道题:A、B、C;
其中C题最难,B题其次,A题最简单,所以陈老师设计了这样一种计算最终分数的方式:A题所占权重为20%,B题为30%,C题为50%
你知道了你每道题的分数,陈老师希望你能给他按权重计算后的最终分数。
输入
输入文件名为score.in。
三个非负整数 A, B, C ,分别表示你三道题目的分数。相邻两个数之间用一个空格隔开,三项成绩满分都是 100 分。
输出
输出文件名为 score.out。
输出共 1 行,包含一个整数,表示你的最终分数(满分也是100分)。
样例输入
100 100 80
样例输出
90
提示
【数据范围】
对于 30% 的数据, A=B=0。
对于另外30%的数据, A=B=100 。
对于100% 的数据, 0≤A,B,C≤100 且A,B,C 都是 10 的整数倍。
输入输出样例1说明
牛牛的作业成绩是 100分,小测成绩是 100分,期末考试成绩是 80 分,总成绩是 100 * 20%+100*30%+80 * 50%=20+30+40=90。
数据说明
对于 30% 的数据, A=B=0。
对于另外30%的数据, A=B=100 。
对于100% 的数据, 0≤A,B,C≤100 且A,B,C 都是 10 的整数倍。
题解:一道简单的c++语言基础题
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//freopen("score.in","r",stdin");
//freopen("score.out","w",stdout");
int a,b,c;
cin>>a>>b>>c;
int ans;
ans=a*20/100+b*30/100+c*50/100;
cout<<ans<<endl;
return 0;
}
问题 B: 发题目
题目描述
陈老师给大家发题目了!第一天,你会得到陈老师精选的一道题,第二天和第三天你每天会得到两道题,之后三天(第四天和第五天和第六天),你每天会得到三道题……
之后连续N天,你每天会得到N道题。
现在你想知道前K天你一共从陈老师那里拿到几道题?
输入
输入文件“ti.in”
输入文件只有 1 行,包含一个正整数 K,表示你要计算的前K天。
输出
输出文件“ti.out”
输出文件只有一行,包含一个整数,表示在前K天你得到的题目数量。
样例输入
6
样例输出
14
提示
【数据范围】
对于 100%的数据,1 ≤ K ≤ 10,000。
题解:用公式法:
具体见代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin>>k;
int sum=0,ans=0,i;
for(i=1;i<=INT_MAX;i++)
{
if(sum+i>k)break;
sum+=i;
}
i-=1;
int t=k-sum;
if(sum==k)
{
ans=i*(i+1)*(2*i+1)/6;//公式
cout<<ans<<endl;
}
else
{
ans=i*(i+1)*(2*i+1)/6+(i+1)*t;//公式(另一种情况)
cout<<ans<<endl;
}
return 0;
}
问题 C: 统计分数
题目描述
陈老师在统计分数时不小心把所有人分数放大了,这使得他的n个学生的分数都变得很大,但不超过不超过1.5×109。已知不相同的分数不超过10000个,现在陈老师希望你可以帮忙统计下这些分数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入
输入文件为“tong.in”
共n+1行。
第一行是整数n,表示学生数;
第2至n+1每行一个自然数,分别表示每个学生的分数(一个学生一个分数)。
输出
输出文件为“tong.out”
共m行(m为n个分数中不相同数的个数),按照分数从小到大的顺序输出。
每行输出2个整数,分别是分数和该分数出现的次数,其间用一个空格隔开。
样例输入
8 2 4 2 4 5 100 2 100
样例输出
2 3 4 2 5 1 100 2
提示
【数据范围】
40%的数据满足:1≤n≤1000
80%的数据满足:1≤n≤50000
100%的数据满足:1≤n≤200000,0 <= 分数 <= 1.5×109
题解:这题数据量比较大,用桶排会爆,但是枚举的个数不多,可以用暴力。
代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int mark;
int ci;
}a[200005];
int n;
int tot=0;
int comp(const node a,const node b)
{
return a.mark<b.mark;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].mark;
sort(a+1,a+1+n,comp);
for(int i=1;i<=n;i++)
{
if(a[i].mark!=a[i-1].mark)
{
a[i-1].ci=tot;
tot=1;
a[i].ci=tot;
}
else
{
tot++;
a[i].ci=tot;
}
}
for(int i=1;i<=n;i++)
if(a[i].mark!=a[i+1].mark)
cout<<a[i].mark<<" "<<a[i].ci<<endl;
}