lalalala


私信TA

用户名:zhangshuo

访问量:161499

签 名:

像狗一样的学习,像绅士一样地玩耍。

等  级
排  名 7
经  验 31295
参赛次数 10
文章发表 201
年  龄 12
在职情况 学生
学  校 芜湖市第十一中学
专  业

  自我简介:

今日懒惰流下的口水,将会成为明日里伤心的泪水。

解题思路:





注意事项:





参考代码:我又来了,童子编程军前进

1.先将输入的char类型用转变为int类型(相信初学者也会)
其次进行暴力逐一进行比较,比较出一样的次数,当然在过程中要注意进行判重(建议设一个布尔变量,判断过一次该数后不在进行判断),将每次出现的次数存在另一个数组中(相信大佬们可以优化到恰当好处!!!)
接着对存放次数的数组进行排序,求出最大值与最小值(其实也完全不需要排序,相信更牛逼的大佬可以直接的结果!!!)
然后进行判断质数(一定要注意“1”不是质素。。。。可怜的我就死在这里很多次。。。。否则会得到60分,但怎么发现都不会发现问题)————不会判断质数的孩子们翻模板
最后就是输出了(入门级别的都会把?)

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;char a[101];int b[101],sum[101],k;bool c[101];int cmp(int x,int y)                      //比较{    if(x>y) return 1;    else return 0;
}int ps(int x)                               //判断质数的模板{ 
    if(x==1) return 0;                  //一定要注意1不为质数
    if(x==2) return 1;    int j=2;    while(j<=sqrt(x)&&x%j!=0) j++;    if(x%j==0) return 0;    else return 1;
}int main(){    cin>>a;    int len=strlen(a);    for(int i=0;i<len;i++)
     b[i+1]=a[i];                             //转化
    for(int i=1;i<=len;i++)      if(c[b[i]]==0)
       {        for(int j=i;j<=len;j++)         if(b[i]==b[j]) 
          sum[i]++;                          //记录
        c[b[i]]=1; 
        k++;    
       }
    sort(sum+1,sum+len+1,cmp);                    //比较
    if(ps(sum[1]-sum[k]))     cout<<"Lucky Word"<<endl<<sum[1]-sum[k];    else 
     cout<<"No Answer"<<endl<<"0";                      //输出
    return 0;
}

2.我可以提供一个非常好理解的方法~~
这道题就是遍历字符串,寻找字符数量然后用数组存起来,排序后判素,然后输出就可以了

#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int sum[10001];
char word[10001];
int vis[10001];
bool is_prime(int n){//判素神器 
    if(n<2)        return false;    for(int i=2;i*i<=n;i++){        if(n%i==0)         return false;
    }    return true;
} 
void findout(int sum[],int len){
    sort(sum,sum+len);    int i,j,ans;    for(i=0;i<len;i++){        if(sum[i]==0) continue;        else{
            ans=sum[len-1]-sum[i];            //prime(ans);//判断ans是不是质数 
            if(is_prime(ans)==true){                printf("Lucky Word\n");                printf("%d",ans);
            }            else{                printf("No Answer\n"); 
                printf("0");
            } 
            break;
        } 
    }
}int main(){    memset(vis,0,sizeof(vis));    scanf("%s",word);    int len=strlen(word);    for(int i=0;i<len;i++){        if(vis[i]==1) continue;        else if(vis[i]==0){            int j;            for(j=i;j<len;j++){                if(word[j]==word[i]){
                    sum[i]++;
                    vis[j]=1;
                }
            }
            vis[i]=1;
        }
    }
    findout(sum,len);    return 0;
}

3.较长一些的代码

#include<stdio.h>
#include<string.h>
int b[27];int zs(int x)//判断质数
{        
int i;        
if(x==1||x==0)return 0;        
for(i=2;i*i<=x;i++)        
if(x%i==0)return 0;        return 1;
}
main()
{        char a[105];        int n,max=0,min=99999999,x,i;
        gets(a);
        n=strlen(a);        for(i=0;i<n;i++)
        {
                b[a[i]-'a']++;
}//统计每个字母出现的个数
        for(i=1;i<=25;i++)        {
                if(b[i]>max)max=b[i];
                if(b[i]!=0&&b[i]<min)min=b[i];
}//找出出现最多的次数和最小的次数
        x=max-min;//求差        if(zs(x)==1)
        {                printf("Lucky Word\n");                printf("%d\n",x);
        }        else
        {                printf("No Answer\n");                printf("%d\n",0);
        }        return 0;
}

5.超长代码

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#define Coding 
using namespace std
#define Explode return
#define AddOneSecond 
if#define ReduceOneSecond 
else#define Read scanf#define Write printf#define For for(i=0;i<=Length+1;i++)   //i一定从0开始  字符串从0开始读;#define Ha for(i=1;i<=149;i++)//一些奇怪的define 宏定义一些自己喜欢的字 ;char String[105];int i,Length,Numbers[150],Maxn=0,Minn=100;bool PriNum(int);//判断素数 讲真可以在100以内搜就行了 ;Coding;int main(){
    Read("%s",String);  //读入字符串
    Length=strlen(String);  //strlen函数读取字符串长度 用<cstring>头文件;
    For   //来一波循环 把字符串每个字符判断一轮;
    {
        AddOneSecond (String[i])
        {
            Numbers[int(String[i])]++;   //嵌套数组,把字母出现的次数记录下来;
        }
    }
Ha
    {
        AddOneSecond(Numbers[i]>Maxn)
        {
            Maxn=Numbers[i];   //如果某个字母出现次数大于Maxn,更新Maxn,最终Maxn就等于出现最多次数的字母出现的次数;
        }
        AddOneSecond(Numbers[i]!=0&&Numbers[i]<=Minn){
            Minn=Numbers[i];   //同上,增加了一些判断;
        }
    }
    AddOneSecond(PriNum(Maxn-Minn)==true)  //如果判断Maxn-Minn是素数 输出Lucky Word 输出该素数
    {
        Write("Lucky Word\n");
        Write("%d",Maxn-Minn);
    }    ReduceOneSecond    Write("No Answer\n0");  //换行
    Explode 0;   //哈哈爆0 #define 宏定义真的可以定义一些好玩的东西}bool PriNum(int GLGJSSYQYHFBQZ)   //判断素数的函数 ,为了方便定义成bool形式;{
    AddOneSecond (GLGJSSYQYHFBQZ==1||GLGJSSYQYHFBQZ==0){  //苟利国家生死以,岂因祸福避趋之;
        Explode false;
    }
    ReduceOneSecond Explode true;    for (i=2;i<=sqrt(GLGJSSYQYHFBQZ);i++){        if (GLGJSSYQYHFBQZ%i==0){
            Explode false;            break;      //有其它因数直接 return false,break跳出循环,return 0讲真不是很规范,不过程序结尾应该return 0;
        }
    }
}

作为大家的拥护者,我有职责将精华发给大家!!!!!!!


 

0.0分

0 人评分

  评论区

  • «
  • »