strlen(s);
sprintf(buf,"%d",abc); strchr(s,buf(1));
返回字符串的已经定义过的部分的长度,不包括“\0”;
向字符串输入(在保证在字符串空间够的情况下,即字符个数加一);
判断字符串中是否含有某个字符,没有,返回NULL。
这道题难度不大,但是在题目中关于for循环到底是从“100 10”开始,是作者弄错了;还是从“111,11”开始,作者这样做有其他深意?这一点网上有争议。
我觉得是作者弄错了,以实验作为理由:
代码:
#include"iostream" #include"cstring" using namespace std; int main() { int count=0; char s[20],buf[99]; scanf("%s",s); for(int abc=100;abc<=999;abc++) for(int de=10;de<=99;de++) { int x=abc*(de%10),y=abc*(de/10),z=abc*de; sprintf(buf,"%d%d%d%d%d",x,y,z,abc,de); int ok=1; for(int i=0;i<=strlen(buf);++i) if(strchr(s,buf[i])==NULL) ok=0; if(ok==1) { count++; printf("<%d>\n",count); printf("%5d\n*%4d\n_____\n%5d\n%4d\n_____\n%5d\n\n",abc,de,x,y,z); } } printf("%d",count); }
输入 108,有34种结果
改为从“111 11”开始,输入108,只有四种结果,所以我认为是作者的失误
如果思路不对,恳请大家指教