竖式问题
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式详见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。
样例输入:
2357
样例输出:
<1>
..775
X..33
-----
.2325
2325.
-----
25575
1、strlen(数组名):计算数组的长度
2、strcmp(数组名1,数组名2):比较两个数组,如果数组2从第一个开始与数组2相同返回1,否则返回-1
3、strcpy(数组名1,数组名2):复制数组2到数组1
4、strcat(数组名1,数组名2):将数组1和数组2连接成1个数组。
5、strchr(数组名1,数组元素):在数组1判查找数组元素,如果没有结果==NULL
6、sprintf(数组名1,"格式控制字符列表",数组名列表):将数组名列表中的数组一格式控制字符中的格式按顺序存入数组1中
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式详见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。
样例输入:
2357
样例输出:
<1>
..775
X..33
-----
.2325
2325.
-----
25575
The number of solutions = 1
#include <stdio.h>
#include <string.h>
int main()
{
char s[6],s1[30];
int i,j,sub,sub1,sub2,count=1,k;
scanf("%s",s);
for(i=100;i<1000;i++)
{
for(j=10;j<100;j++)
{
int flag=0;
sub=i*j;
sub1=i*(j%10);
sub2=i*(j/10);
sprintf(s1,"%d%d%d%d%d",i,j,sub,sub1,sub2);//sprintf将数据写入数组buf
for(int k=0;k<strlen(s1);k++)
{
if(strchr(s,s1[k])==NULL)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("<%d>\n",count);
printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",i,j,sub1,sub2,sub);
count++;
}
}
}
printf("The number of solutions = %d",count-1);
}
关于string.h中的几个函数1、strlen(数组名):计算数组的长度
2、strcmp(数组名1,数组名2):比较两个数组,如果数组2从第一个开始与数组2相同返回1,否则返回-1
3、strcpy(数组名1,数组名2):复制数组2到数组1
4、strcat(数组名1,数组名2):将数组1和数组2连接成1个数组。
5、strchr(数组名1,数组元素):在数组1判查找数组元素,如果没有结果==NULL
6、sprintf(数组名1,"格式控制字符列表",数组名列表):将数组名列表中的数组一格式控制字符中的格式按顺序存入数组1中
7、fprintf、fscanf分别从文件写和读
// fprintf、fscanf的标准写法测试
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fin,*fout;
fin=fopen("data.txt","rb");
fout=fopen("test.out","wb");
char s[30],s1[20];
fscanf(fin,"%s",s);
fscanf(fin,"%s",s1);
fprintf(fout,"%s%s",s,s1);
fclose(fout);
}