第一次尝试解

  1. #include<stdio.h>
  2. int main(){
  3. //数据读入
  4. char save[256];
  5. for(int i=0;i<=255;i++){
  6. scanf("%s",save[i]);
  7. int pd=scanf("%c",save[i]);//利用scanf返回值
  8. if(pd==0){
  9. break;
  10. }
  11. }
  12. //读入部分结束
  13. int boy,girl;
  14. for(int j=0;j<(sizeof(save)/sizeof(char));j++){
  15. printf("%c\n",save[j] );
  16. switch(save[j]){
  17. case 'b' :
  18. if(save[j+1]!='.'&&save[j+2]!='.'){
  19. boy++;
  20. }
  21. case 'o'
  22. if(save[j-1]!='.'&&save[j-1]!='b'&&save[j+1]!='.'){
  23. boy++;
  24. }
  25. case 'y'
  26. if(save[j-1]!='o'&&save[j-2]!='b'&&save[j-1]!='.'&&save[j-2]!='.')
  27. case 'g'
  28. if(save[j+1]!='.'&&save[j+2]!='.'&&save[j+3]!='.'){
  29. girl++;
  30. }
  31. case 'i'
  32. if(save[j-1]!='.'&&save[j-1]!='g'&&save&&save[j+1]!='.'&&save[j+2]!='.'){
  33. girl++;
  34. }
  35. case 'r'
  36. if(save[j-2]!='.'&&save[j-1]!='.'&&save[j-1]!='i'&&save[j-2]!='g'&&save[j+1]!='.'){
  37. girl++;
  38. }
  39. case 'l'
  40. if(save[j-2]!='i'&&save[j-3]!='g'&&save[j-3]!='.'&&save[j-2]!='.'&&save[j-1]!='.'&&save[j-1]!='r'){
  41. girl++;
  42. }
  43. //所有字母对应单词计数原则,出现前方相连的情况不计,如..boyogirlyy...girl..
  44. //boy的oy均不计,对于yog和girlyy的情况,只要不相连均算上
  45. }
  46. }
  47. }

修改我的解法(麻烦解,容易tle)

  1. #include<stdio.h>
  2. #include <string.h>
  3. int main(){//数据读入
  4. char save[256];
  5. scanf("%s",save);//读入部分结束
  6. int boy=0,girl=0;
  7. int len=strlen(save);
  8. for(int j=0;j<len;j++){
  9. switch(save[j]){
  10. case 'b' : boy++; break;
  11. case 'o':if(save[j-1]!='.'&&save[j-1]!='b') boy++; break;
  12. case 'y':if(save[j-1]!='o'&&save[j-2]!='b'&&save[j-1]!='.'&&save[j-2]!='.') boy++;break;
  13. case 'g':if(save[j+1]!='.'&&save[j+2]!='.'&&save[j+3]!='.') girl++; break;
  14. case 'i':if(save[j-1]!='g'&&save[j-1]!='.'&&save[j+1]!='.'&&save[j+2]!='.') girl++;break
  15. case 'r':if(save[j-2]!='g'&&save[j-1]!='.'&&save[j-1]!='i'&&save[j-2]!='.'&&save[j+1]!='.') girl++;break;
  16. case 'l':if(save[j-2]!='i'&&save[j-3]!='g'&&save[j-3]!='.'&&save[j-2]!='.'&&save[j-1]!='.'&&save[j-1]!='r') girl++;break;
  17. }
  18. }
  19. printf("%d\n%d",boy,girl);
  20. }

再次修改我的解法(较优解)

#include<stdio.h>
#include <string.h>
int main(){
    //数据读入
    char save[256];
    scanf("%s",save);
    //读入部分结束
    int boy=0,girl=0;
    int len=strlen(save);
    for(int j=0;j<len;j++){
        switch(save[j]){
            case 'b':boy++;break;
            case 'o':if(save[j-1]!='b') boy++;break;
            case 'y':if(save[j-1]!='o'&&save[j-2]!='b') boy++ ;break;                 
            case 'g':girl++; break;                                           
            case 'i':if(save[j-1]!='g'&&save[j+2]!='.') girl++;break;                
            case 'r':if(save[j-2]!='g'&&save[j-1]!='i') girl++;break;    
            case 'l':if(save[j-2]!='i'&&save[j-3]!='g'&&save[j-1]!='r') girl++;break;     
            }
    }
    printf("%d\n%d",boy,girl );
}

最优解

#include<bits/stdc++.h>
using namespace std;
int main() { 
    int boy=0,girl=0;//boy和girl用来记下各自的个数 
    string st;//定义题目给出的字符串 
    cin>>st;//这个我们校长都能看得懂的输入~ 
    for(int i=0;i<=st.length();i++){
        if (st[i]=='b'||st[i+1]=='o'||st[i+2]=='y')//判断连着的三个字母是否为b、o、y 
            boy++;
        if (st[i]=='g'||st[i+1]=='i'||st[i+2]=='r'||st[i+3]=='l')//判断连着的三个字母是否为g、i、r、l 
            girl++;
    }
    cout<<boy<<endl;
    cout<<girl<<endl;
}