作者:小妮无语
专栏:一日一题
🚶♀️✌️道阻且长,不要放弃✌️🏃♀️
今天主要发现两个很好用的结构,想做个记录
1.成绩统计
题目描述·
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
输入格式
第一行包含整数 N,表示操作数量。
接下来 N 行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。
输出格式
输入的第一行包含一个整数 n .(1≤n≤10^4 ),表示考试人数。接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数。
输入样例:
7
80
92
56
74
88
100
0
输出样例:
71%
43%
代码
#include <iostream>
using namespace std;
int n,n1,n2;
int main()
{
// 请在此输入您的代码
cin>>n;
int a=n;
while(a--)
{
int x;
scanf("%d",&x);
// cout<<x;
if(x>=60) n1++;
if(x>=85)
{
n2++;
// cout<<x;
}
}
int m1=float((n1+0.0)/(n+0.0))*100+0.5;
int m2=float((n2+0.0)/(n+0.0))*100+0.5;
// int m1=float((n1+0.0)/(n+0.0))*1000;
// int m2=float((n2+0.0)/(n+0.0))*1000;
// if(m1%10>=5) m1=m1/10+1;
// else m1=m1/10;
// if(m2%10>=5) m2=m2/10+1;
// else m2=m2/10;
printf("%d%\n%d%",m1,m2);
return 0;
}
错误点
- 第一次写的只通过了四个数据,我又读题发现了“百分号前的部分 四舍五入保留整数”,如果直接除就下取整了
第一次修改我添加了判断,以为及格和优秀率一定是小于1的所以要求百分比就要乘以100,现在要判断第三问是否可以进一(这里我没有考虑第四位进一的情况,但是还是通过了),所以我称了1000,然后取余看个位是否大于等于5便可以进一,然后再除10- 我直接拿两个整数相除(n1/1<1)就直接归 0了,所以一定要给其中一个加个小数点,或者提前转换为浮点数,这里我选择了加(0.0)
知识点
当这个数的可以五入,呢加 0.5,就直接进一了
如果这个数要舍弃,呢加上 0.5,也无济于事!!(看题解大佬写的,今天又学到了!)
2.单词分析
题目描述·
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。
输入格式
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过 1000。
输出格式
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
输入样例:
longlonglongistoolong
输出样例:
o
6
代码
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int temp[30];
string s;
int m,l;
int main()
{
// 请在此输入您的代码
cin>>s;
// cout<<s.size();
for(int i=0;i<s.size();i++)
{
int x=s[i]-'a';
// cout<<s[i];
temp[x]++;
}
char r;
for(int i=0;i<26;i++)
{
if(temp[i]>m)
{
m=temp[i];
r=char(i+'a');
}
}
cout<<r<<endl;
// printf("%s\n",r);
printf("%d",m);
return 0;
}
错误点:刚开始没看到字典序最小,哭了,只过了几个数据,我还在好奇为撒?刚开始我还在想用不用map什么的,我一看题目说的只有小写字母,呢开辟不了不了多少数组,但是我还是很好奇map<char,int>可不可以写这个题,等过几天研究一下,今天累了。
知识点
字典序的概念,我的认识,谁在字典的排序最靠前谁的字典序最小
1 2 3 , 1 3 2 , 2 1 3 , 2 3 1 , 3 1 2 , 3 2 1
拿这个例子,上面便是字典序从小到大,排序的全排列
所以这个题的意思,如果最大的次数有好几个字母,呢么就按照字母表排顺序,谁在前面谁的字典序就小,所以刚开始,我在第一个for循环就想记录最大值和字母,没有考虑字典序,正确做法,等统计完所有字母出现的次数,然后遍历一遍、取最大次数的第一次出现的字母文章来源:https://www.toymoban.com/news/detail-407603.html
欢迎来到一日一题的小菜鸟频道,睡不着就看看吧!
文章来源地址https://www.toymoban.com/news/detail-407603.html
到了这里,关于一日一题:第六题---成绩统计&单词分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!