第一次尝试解
#include<stdio.h>int main(){ //数据读入 char save[256]; for(int i=0;i<=255;i++){ scanf("%s",save[i]); int pd=scanf("%c",save[i]);//利用scanf返回值 if(pd==0){ break; } } //读入部分结束 int boy,girl; for(int j=0;j<(sizeof(save)/sizeof(char));j++){ printf("%c\n",save[j] ); switch(save[j]){ case 'b' : if(save[j+1]!='.'&&save[j+2]!='.'){ boy++; } case 'o' if(save[j-1]!='.'&&save[j-1]!='b'&&save[j+1]!='.'){ boy++; } case 'y' if(save[j-1]!='o'&&save[j-2]!='b'&&save[j-1]!='.'&&save[j-2]!='.') case 'g' if(save[j+1]!='.'&&save[j+2]!='.'&&save[j+3]!='.'){ girl++; } case 'i' if(save[j-1]!='.'&&save[j-1]!='g'&&save&&save[j+1]!='.'&&save[j+2]!='.'){ girl++; } case 'r' if(save[j-2]!='.'&&save[j-1]!='.'&&save[j-1]!='i'&&save[j-2]!='g'&&save[j+1]!='.'){ girl++; } 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++; } //所有字母对应单词计数原则,出现前方相连的情况不计,如..boyogirlyy...girl.. //boy的oy均不计,对于yog和girlyy的情况,只要不相连均算上 } }}
修改我的解法(麻烦解,容易tle)
#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]!='.'&&save[j-1]!='b') boy++; break; case 'y':if(save[j-1]!='o'&&save[j-2]!='b'&&save[j-1]!='.'&&save[j-2]!='.') boy++;break; case 'g':if(save[j+1]!='.'&&save[j+2]!='.'&&save[j+3]!='.') girl++; break; case 'i':if(save[j-1]!='g'&&save[j-1]!='.'&&save[j+1]!='.'&&save[j+2]!='.') girl++;break; case 'r':if(save[j-2]!='g'&&save[j-1]!='.'&&save[j-1]!='i'&&save[j-2]!='.'&&save[j+1]!='.') girl++;break; 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; } } printf("%d\n%d",boy,girl);}
再次修改我的解法(较优解)
#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;
}