针对输入的数字集合的"abc*de"竖式计算

一.问题描述:
找出所有形如“abc*de”(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序应该输出空格,而非小数点)。
样例输入:
2357
样例输出:

针对输入的数字集合的"abc*de"竖式计算

 

二. 问题分析:按竖式计算的步骤各自计算,并将过程中算出的数得到一个数字集合ele,遍历ele并与原集合all对比,保证ele是all的子集

  关键步骤:

①sprintf()函数

②strchr()函数

三.代码如下:

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     char all[20],ele[100];
 6     int cnt;
 7     scanf("%s",all);
 8     for(int abc=111;abc < 999;abc ++){
 9         for(int de=11;de < 99;de ++){
10             int x = abc*(de%10),y = abc*(de/10),z = abc*de;
11             sprintf(ele,"%d%d%d%d%d",abc,de,x,y,z);
12             
13             int ret=1;//用来判断是否输出的基准 
14             for(int i=0;i < strlen(ele);i ++){
15                 if(strchr(all,ele[i])==NULL)//但凡有不在原集合中的元素... 
16                     ret=0;
17             }
18             if (ret){
19                 printf("<%d>\n",++cnt);
20                 printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",abc,de,x,y,z);
21             } 
22         }
23     }
24     printf("The number of solutions is %d\n",cnt);
25     return 0;
26 }

   

上一篇:2020-2021 ICPC - Gran Premio de Mexico - Repechaje


下一篇:mysql报错In aggregated query without GROUP BY