先来了解一下 strchr( ) 函数:
原型:extern char *strchr(const char *s,char c);
头文件:#include <string.h>
功能:查找字符串s中首次出现字符c的位置
说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。
举例1:(在Visual C++ 6.0中运行通过)
#include <string.h> #include <stdio.h> int main(void) { char string[15]; char *ptr, c = 'r'; strcpy(string, "This is a string"); ptr = strchr(string, c); if (ptr)printf("The character %c is at position: %d/n", c, ptr-string); else printf("The character was not found/n"); return 0; }
举例2:
#include <stdio.h> #include <string.h> int main() { char temp[32]; memset(temp,0,sizeof(temp)); strcpy(temp,"Golden Global View"); char *s = temp; char *p,c='v'; p=strchr(s,c); if(p) printf("%s",p); else printf("Not Found!"); return 0; }
poj(pku)1013代码
#include<stdio.h> #include<string.h> char left[3][7],right[3][7],result[3][5]; //设置两个函数分别判断假币是轻还是重于真币 bool dealLight(char x) { int i; for(i=0;i<3;i++) { switch(result[i][0]) { case 'u': if(strchr(right[i],x)==NULL) return false; //假币在右边,所以右边应该能找到该字符 break; case 'd': if(strchr(left[i],x)==NULL) return false; //假币在左边,所以左边应该能找到该字符 break; case 'e': if(strchr(right[i],x)!=NULL || strchr(left[i],x)!=NULL) return false; //两边全都是真币,所以两边都找不到该字符 break; } } return true; } //同理,在下面的函数中,strchr也是这么用的 bool dealHeavy(char x) { int i; for(i=0;i<3;i++) { switch(result[i][0]) { case 'u': if(strchr(left[i],x)==NULL) return false; break; case 'd': if(strchr(right[i],x)==NULL) return false; break; case 'e': if(strchr(right[i],x)!=NULL || strchr(left[i],x)!=NULL) return false; break; } } return true; } int main() { int t,i; char c; scanf("%d",&t); while(t--){ for(i=0;i<3;i++) scanf("%s%s%s",left[i],right[i],result[i]); for(c='A';c<='L';c++){ if(dealLight(c)==1){ printf("%c is the counterfeit coin and it is light./n",c);break; } if(dealHeavy(c)==1){ printf("%c is the counterfeit coin and it is heavy./n",c);break; } } } return 0; }
附上几组数据,希望对你A过这道题有帮助
sample input
12
ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even
AGHL BDEC even
JKI ADE up
J K even
ABCDEF GHIJKL up
ABC DEF even
I J down
ABCDEF GHIJKL up
ABHLEF GDIJKC down
CD HA even
A B up
B A down
A C even
A B up
B C even
DEFG HIJL even
ABC DEJ down
ACH IEF down
AHK IDJ down
ABCD EFGH even
AB IJ even
A L down
EFA BGH down
EFC GHD even
BA EF down
A B up
A C up
L K even
ACEGIK BDFHJL up
ACEGIL BDFHJK down
ACEGLK BDFHJI down
ACEGIK BDFHJL up
ACEGIL BDFHJK down
ACEGLK BDFHJI up
sample output
K is the counterfeit coin and it is light.
I is the counterfeit coin and it is heavy.
I is the counterfeit coin and it is light.
L is the counterfeit coin and it is light.
B is the counterfeit coin and it is light.
A is the counterfeit coin and it is heavy.
A is the counterfeit coin and it is light.
L is the counterfeit coin and it is heavy.
A is the counterfeit coin and it is light.
A is the counterfeit coin and it is heavy.
L is the counterfeit coin and it is light.
K is the counterfeit coin and it is heavy