UVa 10924-Prime Words

*爱你&永不变心* 提交于 2020-01-08 13:06:50

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

问题描述】

本题输入一个单词集合,每个单词由a-z和A-Z的字母组成。每个字母对应一个特殊的值,字母a对应1,字母b对应2,以此类推,字母z对应26;同样,字母A对应27,字母B对应28,字母Z对应52。

已个单词的字母总和是素数,则这个单词是素单词,请编写程序,判定一个单词是否为素单词。

输入:

输入给出一个单词集合,每个单词一行,有L个字母,1<=L<=20.输入以EOF结束。

输出:

如果一个单词的子母和为素数,则输出“It is a prime word.”;否则输出“It is not a prime word.”

样例输入:

24 3 
24 2  
2 1  
1 1  
4 2  
18 3  
17 1  
17 3  
17 4  
100 5  
1000 10  
1120 14  
0 0

样例输出:

It is a prime word.
It is not a prime word.
It is not a prime word.


【解题思路

    特别提示:此题中1位素数。

    先离线计算出[21010]的素数筛u[]。然后计算字母对应的数字和。判断该数书否为素数。输出结果。

【具体实现

#include<iostream>
#include<cstring>

#define maxNum 1040

using namespace std;

int SIGN[maxNum];

int value(char c)
{
	if (c >= 'a' & c <= 'z')
		return c - 'a' + 1;
	else return c - 'A' + 27;
}

int main(){
	for (int i = 1; i <= maxNum; ++i)
		SIGN[i] = 1;
	for (int i = 2; i <= maxNum; ++i)
	if (SIGN[i])
	for (int j = 2 * i; j <= maxNum; j += i)
		SIGN[j] = 0;

	char str[25];
	while (cin >> str){
		int sum = 0;
		for (int i = 0; str[i]; ++i){
			sum += value(str[i]);
		}
		
		cout << "It is ";
		if (!SIGN[sum]) cout << "not ";
		cout << "a prime word." << endl;
	}

	return 0;
}


【额外补充

    此题中1为素数。

    1是素数吗?是我数学没学好?还是出题人的数学是体育老师教的?

    生无可恋。




标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!