题目描述
小科的妈妈在质检局工作,根据工作安排,今天她要去红星零件厂检查某种新型零件的合格率是否满足国家规定的质量要求。小科的妈妈和以往一样,带了一个长度为k的放大镜,可以一次性检测k个零件,原本红星修理厂该零件一批次只会生产k个,但是由于疫情期间贸易交通不便,红星修理厂一共积压了n(n大于k)个该零件,n个零件呈一条直线排列在车间里,每个零件按质量分等级,最高为S,接着往下是A,B,C,D,E,F,根据国家规定,质量等级达到某个等级的零件被认为是合格零件。小科的妈妈利用她带来的放大镜,只检测一次连续的k个零件 , 问她这一次检测最大的合格率是多少(合格率为合格零件数量/检测的零件数量)。
输入格式
输入共四行
第一行 一个整数,表示待检测零件数量n(10<=n<=1000);
第二行 n个字符,分别n个零件的质量等级(质量等级从高到低为S,A,B,C,D,E,F,全为大写字母且不包含空格);
第三行 一个字符表示合格零件的质量等级要求(可能值为S,A,B,C,D,E,F);
第四行 一个整数表示小科妈妈放大镜的长度k(5<=k<=10);
输出格式
输出一行,输出小科妈妈这一次检测最大的合格率(结果保留两位小数)
输入输出样列
输入样例1:复制
20 SSFDDBCCAFEEDACCBSSD C 10
输出样例1:复制
0.60
说明
检测 SSFDDBCCAF这一段,合格零件个数为6个,检测个数为 10个,合格率为0.60
【耗时限制】1000ms 【内存限制】256MB
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<sstream>
using namespace std;
int main(){
int n,k;//n:待检测零件数量,k:放大镜的长度
double maxn=0;//求最大合格率
char c;//合格零件的质量等级要求
string s;//n个零件的质量等级
cin>>n>>s>>c>>k;
for(int i=0;i<s.size()-(k-1);i++){
int cnt=0;
for(int j=i;j<=i+k-1;j++){
if(s[j]=='S'||(c!='S'&&s[j]<=c)){
cnt++;
}
}
if(cnt*1.0/k>maxn) maxn=cnt*1.0/k;//求最大值
}
printf("%.2lf",maxn);//格式化输出,保留两位小数
return 0;
}
本博客探讨如何使用C++编程解决零件质量检测问题。通过读取零件数量、质量等级、合格标准和放大镜长度,计算最大合格率。算法涉及字符串处理和比例计算,确保结果保留两位小数。

1万+

被折叠的 条评论
为什么被折叠?



