prime frequency java_UVa 10789 - Prime Frequency

【问题描述】

给出一个仅包含字母和数字(0-9, A-Z以及a-z)的字符串,请您计算频率(字符出现的次数),并仅报告哪些字符的频率是素数。

输入:

输入的第一行给出一个整数T( 0

输出:

对输入的每个测试用例输出一行,给出一个输出序列号,然后给出在输入的字符串中频率是素数的字符。这些字符按字母升序排列。所谓“字母升序”意谓按ASCII值升序排列。如果没有字符的频率是素数,输出“empty”(没有引号)。

样例输入

样例输出

3

ABCC

AABBBBDDDDD

ABCDFFFF

Case 1: C

Case 2: AD

Case 3: empty

【解题思路】

先离线计算出[2‥2200]的素数筛u[]。然后每输入一个测试串,以ASCLL码为下标统计各字符的频率p[],并按照ASCLL码递增的顺序(0≤i≤299)输出频率为素数的字符(即u[p[i]]=1且ASCLL码值为i的字符)。若没有频率为素数的字符,则输出失败信息。

【具体实现】

#include 

#include 

#include 

#include 

using namespace std;

int  prime[2004] = { 0 };

char str[2004];

int  size[256];

int main()

{

prime[0] = prime[1] = 1;

for (int i = 2; i 

if (!prime[i])

for (int j = i * 2; j 

prime[j] = 1;

int T;

while (cin >> T)

for (int t = 1; t <= T; ++t) {

cin >> str;

memset(size, 0, sizeof(size));

for (int i = 0; str[i]; ++i)

size[str[i]] ++;

cout <

int number = 0;

for (int i = 0; i 

if (!prime[size[i]])

if (i >= '0' && i <= '9'

|| i >= 'A' && i <= 'Z'

|| i >= 'a' && i <= 'z') {

cout <

number++;

}

if (!number) cout <

cout <

}

return 0;

}

【额外补充】

1、extern关键字:此关键字为C语言的残留,可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。

2、函数的局部变量,其它函数怎么访问:可以在外部申请一个全局变量来获取它的值。不需要把简单的问题复杂化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值