<span style="font-size:18px;">#include <cstdio>
#include <cstring>
int main()
{
char s[20],buf[99];
int k=1;
scanf("%s",s);
for(int abc=111;abc<=999;abc++)
for(int de=11;de<=99;de++)
{
int z=abc*de,y=abc*(de/10),x=abc*(de%10);
sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);
int flag=0;//注意这里更新flag的值。。
for(int i=0;i<strlen(buf);i++)
if(strchr(s,buf[i])==NULL){flag++;break;}
if(!flag){printf("<%d>\n%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",k++,abc,de,x,y,z);}//注意一下第二个横线前面那个是%4d。
}
printf(".The number of solutions = %d\n",k-1);
return 0;
}</span>
strchr(s,buf[i]):返回首次出现buf[i]的位置,若s中不存在buf[i]则返回NULL。
sprintf:输出到字符串
strlen()返回的是结束标记之前字符的个数
abc 和 de直接像数那样循环就好了。。一开始想的是一个一个字母循环就太麻烦了,因为反正是可以重复的。