String、StringBuffer、StringBuilder与Arrays:底层原理、选型逻辑与避坑指南
2026/10/8 16:07:47
方法一(AI): #include <stdio.h> #include <string.h> #define A 100 int main() { char str[A]; scanf("%s",str); int len=strlen(str); int cnt[26]={0}; //第一步:先统计每个字母出现多少次(去重,只算每种字母) for(int i=0;i<len;i++) { cnt[str[i]-'a']++; } int maxn=0,minn=100; for(int i=0;i<26;i++) { if(cnt[i]==0) continue; //没出现过的字母跳过 if(cnt[i]>maxn) maxn=cnt[i]; if(cnt[i]<minn) minn=cnt[i]; } int c=maxn-minn; int flag=0; //关键点:c<=1直接不是质数 if(c>=2) { for(int i=2;i<c;i++) { if(c%i==0) { flag=1; break; } } } else { flag=1; } if(flag==1) { printf("No Answer\n"); printf("0\n"); } else { printf("Lucky Word\n"); printf("%d\n",c); } return 0; } 方法二(自己写): #include <stdio.h> #include <string.h> #define A 100 int main() { int a=0,b=1,c=0,d=0; int flag=0; int maxn=0,minn=100; char str[A]; scanf("%s",str); a=strlen(str); for(int i=0;i<a;i++) { d=0; // q=i-1!只查i前面,不查自己!这是最关键修改 for(int q=i-1;q>=0;q--) { if(str[i]==str[q]) { d=1; break; } } if(d==1) { continue; } b=1; // 移到这里更保险 for(int j=i+1;j<a;j++) { if(str[i]==str[j]) { b++; } } if(maxn<=b) { maxn=b; } if(minn>=b) { minn=b; } } c=maxn-minn; flag=0; // c<=1直接不是质数 if(c>=2) { for(int i=2;i<c;i++) { if((c%i)==0) { flag=1; break; } } } else { flag=1; } if(flag==1) { printf("No Answer\n"); printf("0\n"); } else { printf("Lucky Word\n"); printf("%d\n",c); } return 0; }#include <stdio.h> #include <string.h> #include <ctype.h> #define MAX 1000010 int main() { char str1[20]; static char str2[MAX]; scanf("%s",str1); getchar(); // 吃掉换行,不然读不到文章 int i=0; char ch; while((ch=getchar())!='\n'&&ch!=EOF){ str2[i++]=ch; } str2[i]='\0'; int a=strlen(str1); int b=strlen(str2); // 全部转小写(大小转换) for(int k=0;k<a;k++) str1[k]=tolower(str1[k]); for(int k=0;k<b;k++) str2[k]=tolower(str2[k]); int g=0; int q=-1; // i最多走到 b‑a for(int i=0; i <= b-a; i++) { int ok=1; for(int j=0;j<a;j++) { if(str2[i+j]!=str1[j]) { ok=0; break; } } // 字符全部对上了 → 再判断是不是完整单词(你说的判断空格!) if(ok) { int left_ok = (i==0) || (str2[i-1]==' '); int right_ok = (i+a == b) || (str2[i+a]==' '); if(left_ok && right_ok) { g++; if(q==-1) q=i; // 存第一次位置 } } } if(g==0) printf("-1\n"); else printf("%d %d\n",g,q); return 0; }