永发信息网

求这道题的C++解法

答案:1  悬赏:80  手机版
解决时间 2021-07-18 14:28
  • 提问者网友:捧腹剧
  • 2021-07-18 06:19
全国信息学奥林匹克联赛(NOIP2008)复赛
提高组
一、题目概览
中文题目名称 笨小猴 火柴棒等式 传纸条 双栈排序
英文题目名称 word matches message twostack
可执行文件名 word matches message twostack
输入文件名 word,in matches.in message.in twostack.in
输出文件名 word.out matches.out message.out twostack.out
每个测试点时限 1秒 1秒 1秒 1秒
测试点数目 10 10 10 10
每个测试点分值 10 10 10 10
比较方式 全文比较 全文比较 全文比较 全文比较
题目类型 传统 传统 传统 传统
二、提交源程序文件名
对于Pascal语言 word.pas matches.pas message.pas twostack.pas
对于C语言 word.c matches.c message.c twostack.c
对于C++语言 word.cpp matches.cpp message.cpp twostack.cpp
三、编译命令(不包含任何优化开关)
对于Pascal语言 fpc word.pas fpc matches.pas fpc message.pas fpc twostack.pas
对于C语言 gcc –o word word.c gcc –o matches matches.c gcc –o message message.c gcc –o twostack twostack.c
对于C++语言 g++ -o word word.cpp g++-o matches matches.cpp g++ -o message message.cpp g++ -o twostack twostack.cpp
四、运行内存限制
运行内存上限 50M 50M 50M 50M
注意事项:
1. 文件名(程序名和输入输出文件名)必须使用大写。
2. C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3. 全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。各省在自测时可根据具体配置调整时限。

1. 笨小猴
(word.pas/c/cpp)
【问题描述】
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
【输入】
输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
【输出】
输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
【输入输出样例1】
word.in word.out
error Lucky Word
最佳答案
  • 五星知识达人网友:青尢
  • 2021-07-18 06:51

#include<iostream>
#include<math.h>
using namespace std;


int su(int x)
{
int i;
if(x<2)
return 0;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;
}
int main()
{
FILE *fp;
char s[100]={0};
int maxn,minn,sub;
int i,c[26]={0};


fp=fopen("WORD.IN","r");
fgets(s,99,fp);
fclose(fp);
for(i=0;s[i]!='\0';i++)
c[s[i]-97]++;


maxn=minn=0;
for(i=0;i<26;i++)
if(c[i]!=0)
{
if(maxn==0)maxn=minn=c[i];
if(maxn<c[i])maxn=c[i];
if(minn>c[i])minn=c[i];
}


sub=maxn-minn;
fp=fopen("WORD.OUT","w");
if(su(sub))
{
fputs("Lucky Word",fp);
fprintf(fp,"\n%d",sub);
}
else
{
fputs("No Answer\n0",fp);
}
fclose(fp);


return 0;
}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯