小范同学非常地爱干净,他的家中有个雪豹机器人,每天都会推送房屋的整洁情况,但是这个机器人受到了来自东方的神秘力量的干扰,导致信息的传输发生了错误。不过幸运的是,这些传输回来的信息依然有迹可循。小范看到的错误信息是一个只由小写字母组成的字符串s(1≤∣s∣≤100),已知在字符串s中,若组成s的字母种类的个数为偶数,代表房屋干净,否则代表房屋中有异物,不干净。 输入描述 输入有1行,为字符串s。 输出描述 输出只有1行,若房屋干净,输出一行CLEAN!,若房屋不干净,即有异物,输出一行EYEWINKER!。 用例输入 1 ovouo 用例输出 1 EYEWINKER! 用例输入 2 qaq 用例输出 2 CLEAN! 用C语言编写
时间: 2025-03-14 12:14:25 浏览: 32
<think>好的,我现在需要解决这个问题。题目是说,给定一个由小写字母组成的字符串s,判断其中不同字母的种类数是奇数还是偶数。如果是偶数,输出CLEAN!,否则输出EYEWINKER!。那我得用C语言来编写这个程序。
首先,我需要考虑如何统计字符串中不同字符的种类数。因为字符串中只包含小写字母,所以可能的字符有26种。这时候,可以想到用一个数组来记录每个字母是否出现过。比如,创建一个长度为26的数组,初始值都是0,然后遍历字符串中的每个字符,将对应的位置标记为1,表示该字母存在。最后统计数组中1的个数,就能得到不同字母的种类数。
那具体怎么操作呢?比如,字符'a'对应数组的下标0,'b'对应下标1,以此类推到'z'是下标25。遍历字符串的每个字符时,可以用字符减去'a'得到对应的下标。例如,字符c是'c' - 'a'等于2,这样数组下标2的位置就标记为1。
然后,统计数组中1的数量。比如,假设数组是count[26],那么遍历这个数组,将所有为1的元素加起来,得到总共有多少种不同的字母。接着判断这个总数是奇数还是偶数。如果是偶数,输出CLEAN!,否则输出EYEWINKER!。
接下来要考虑输入输出的问题。输入是一个字符串,可以通过scanf或者gets来读取。但要注意,C语言中字符串的读取可能会有空格的问题,但题目中说输入只由小写字母组成,所以可能没有空格,直接可以用scanf的%s格式读取到字符数组中。比如,定义一个char s[101],然后用scanf("%s", s)来读取。
然后,处理字符串中的每个字符。遍历这个字符串,直到遇到'\0'为止。每个字符对应的下标计算,然后标记数组中的位置。
然后统计数组中的1的数量,再判断奇偶性。
举个例子,用例输入1是ovouo。这个字符串中的字符是o, v, o, u, o。不同的字符是o, v, u三种,数量是3,奇数,所以输出EYEWINKER!。而用例输入2是qaq,不同字符是q和a两种,数量2是偶数,输出CLEAN!。
那现在需要把这些步骤转化为C代码。
代码的大致步骤:
1. 定义一个字符数组来存储输入的字符串,比如char s[101]。
2. 定义一个长度为26的整型数组count,初始化为0。
3. 读取输入字符串s。
4. 遍历字符串中的每个字符:
a. 对于当前字符c,计算index = c - 'a'。
b. 将count[index]设为1,表示该字符出现过。
5. 统计count数组中1的总数。
6. 判断总数是否为偶数,输出对应的结果。
需要注意的是,虽然同一个字符可能出现多次,但我们只需要统计是否出现过,所以不管出现多少次,只要出现一次就标记为1,多次出现不影响统计结果。
比如,字符串"qaq"中的q出现两次,但只被统计一次,a出现一次,所以总共有2种。
现在,编写代码时需要注意数组越界的问题吗?比如,输入的字符是否全是小写字母?题目中已经说明输入字符串只由小写字母组成,所以不需要检查,可以直接处理。
接下来,编写代码的结构:
#include <stdio.h>
#include <string.h> // 为了使用strlen函数
int main() {
char s[101];
int count[26] = {0}; // 初始化为0
scanf("%s", s);
int len = strlen(s);
for (int i = 0; i < len; i++) {
char c = s[i];
int index = c - 'a';
count[index] = 1; // 标记为存在
}
int total = 0;
for (int i = 0; i < 26; i++) {
total += count[i];
}
if (total % 2 == 0) {
printf("CLEAN!\n");
} else {
printf("EYEWINKER!\n");
}
return 0;
}
这样应该就能解决问题了。测试一下用例:
用例1输入ovouo,字符有o、v、u三种,total为3,奇数,输出EYEWINKER!。代码中统计后total是3,正确。
用例2输入qaq,字符是q和a两种,total是2,偶数,输出CLEAN!。正确。
那这样应该没问题。这里需要注意的是,数组count初始化为0,然后每个字符出现的位置设为1,这样重复出现的字符不会增加总数,只有不同的字符才会被计数。所以这个方法是正确的。</think>```c
#include <stdio.h>
#include <string.h>
int main() {
char s[101];
int count[26] = {0}; // 初始化字母存在标记数组
scanf("%s", s); // 读取输入字符串
// 遍历字符串标记存在的字母
for (int i = 0; i < strlen(s); i++) {
int index = s[i] - 'a';
count[index] = 1;
}
// 统计不同字母种类数
int typeCount = 0;
for (int i = 0; i < 26; i++) {
typeCount += count[i];
}
// 判断奇偶并输出结果
printf(typeCount % 2 ? "EYEWINKER!\n" : "CLEAN!\n");
return 0;
}
```
阅读全文
相关推荐















