社区讨论

AC分享一下思路

P1125[NOIP 2008 提高组] 笨小猴参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi6mjxij
此快照首次捕获于
2025/11/20 07:19
4 个月前
此快照最后确认于
2025/11/20 07:19
4 个月前
查看原帖
CPP
#include<iostream>
#include<algorithm>     // 超级好用的头文件   c+大法好
#include<math.h>
#include<string>
using namespace std;
bool is_prenum(int n);
struct abc {
    char x;
    int count = 1;
};                       //设置一个结构体来储存 每个字母和他们的出现次数
int main() {
    string s;            //这个长单词
    struct abc k[27];
    int i,j=0,judgment=0,max=0,min=101,jd;
    cin >> s;
    sort(s.begin(), s.end());      //   把这个字符串排序   就是所有相同的字母放到一起   
    for (i = 0; i < s.length(); i++) {//     然后开始遍历这个字符串     
        if (k[j].x != s[i]) {
            if (judgment > j) {//      遇到不一样的字母就用结构体的下一个单元储存    judgment是用来判断  j  是不是应该++了   当judgment大于j时  已经是第二个字母了 
                j = judgment;
            }
            k[j].x = s[i];
            judgment++;
        }
        else {
            k[j].count++;
        }
    }
    for (i = 0; i < judgment; i++) {//////              然后遍历结构体   比较count的大小  存储在max和min中 
        if (max<k[i].count) {
            max = k[i].count;
        }
        if (min > k[i].count) {
            min = k[i].count;
        }
    }
    jd = max - min;//////              max-min 方便判断质数
    if (is_prenum(jd)) {
        cout << "Lucky Word" << endl << jd << endl;
    }
    else {
        cout << "No Answer" << endl << "0" << endl;
    }
    system("pause");
    return 0;
}
bool is_prenum(int n) {
    if (n < 2) {
        return false;
    }
    int i;
    for (i = 2; i < sqrt(n); i++) {
        if (n%i == 0) {
            return false;
        }
    }
    return true;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...