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

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

 

二. 问题分析:按竖式计算的步骤各自计算,并将过程中算出的数得到一个数字集合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 }
复制代码

   

posted @   泥烟  阅读(269)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示