时间限制: 1 Sec 内存限制: 128 MB
提交: 539 解决: 233
[状态] [提交] [命题人:外部导入]
题目描述
一天crazy_snail正在读英文书,突发奇想,他想看一下自己的名字“snail”中每个字母在文章中出现的次数的总和占文章总长度的百分比(即’s’,’n’,’a’,’i’,’l’,在给定的字符串中出现的个数总和占总长度的百分比,小数部分直接舍去)。你能帮助他么?
输入
第一行输入一个n 表示有n组测试实例。n为整数。
其下有n行,每行一组测试实例;
每组测试实例包括一个长度不超过200的字符串,且字符串中出现的字符都为小写字母。
输出
每组实例输出其对应的百分比(按照“55%”的格式输出),且每组输出占一行。
样例输入 Copy
2
snailyouy
snail
样例输出 Copy
55%
100%
提示
注意:最好用%s输入
本以为这只是一道简简单单的程序题,但是在遇到题目不四舍五入的要求时,我陷入了沉思…,然后我打开了百度~~~,假设我们求a/b不四舍五入的情况,方法如下
int c;
c=a/b;
printf("%.0f\n",(c/100.0)*100)
在统计字符串个数的时候,我也发现了一个巧妙的方法
int len = strlen(str)
int a[MAXN];
for(int i=0;i<len;i++)
{
a[str[i]-'a']++; //统计不同字符的个数,当为a时,则a[0]++
}
这样这道题的难点就通过了,ac代码如下
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <string>
#include <cstring>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
double sum=0;
int a[26];
memset(a,'\0',sizeof(a));
char str[203];
scanf("%s",str);
double len;
len=strlen(str);
for(int j=0;j<len;j++){
a[str[j]-'a']++;
}
sum=a[0]+a[8]+a[11]+a[18]+a[13];
int b=(sum/len)*100;
printf("%.0f%\n",(b/100.0)*100);
}
return 0;
}