找出所有形如abc*bc(三位数乘二位数)的算式,使得在完整的竖式中,
所有数字都属于一个特定的数字集合。输入数字集合,
输出所有竖式,每个数字前应该有编号,最后输出解的总数
如
输入2357
输出
<1>
775
X 33
-----
2325
2325
-----
25575
The number of solutions = 1
//竖式问题
#include<stdio.h>
#include<string.h>
int main()
{
char num[20],buf[100];
int i,j,count=0,z;
scanf("%s",num); //注意这里num前面没有& !!!!!!
for(i=100;i<=999;i++)
{
for(j=10;j<=99;j++)
{
int sum_1=i*(j%10);int sum_2=i*(j/10);int sum=j*i;
sprintf(buf,"%d%d%d%d%d",i,j,sum_1,sum_2,sum);
int ok=1;
for(z=0;z<strlen(buf);z++)
{
if(strchr(num,buf[z])==NULL)
ok=0;
}
if(ok)
{
printf("<%d>\n",++count);
printf("%5d\nX%4d\n-----\n%5d\n%-5d\n-----\n%d\n\n",i,j,sum_1,sum_2,sum);
}
}
}
printf("The number of solutions = %d\n",count);
return 0;
}
这里值得注意的是使用%s时 不用使用& !!!因为字符数组本身就是地址!!!
这里使用了spring函数,这个函数的主要作用是将一些变量的值导入一个数组中
我们还使用了strchr()函数,这个函数原型为char* strchr(const char* str, int c);
其中
- str:被查找的字符串
- c:要查找的字符
strchr() 函数会依次检索字符串 str 中的每一个字符,直到遇见字符 c,或者到达字符串末尾(遇见\0)。
与此同时,配合strchr()函数,我们还使用了变量ok作为记号变量~~~~~~~~