竖式问题

问题:

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

样例输入:

2 3 5 7

样例输出:

<1>
..775
X..33
-----
.2325
2325.
-----
25575


分析:

本题的思路是非常清晰的;尝试所有的abc和de,判断是否满足条件。我们可以得出整个程序的伪代码:

char s[20];
int count = 0;
scanf("%s",s);
for (int abc = 111; abc <= 999; abc++)
    for (int de = 11; de <= 99; de++)
     if("abc*de"是个合法的竖式)
     {
         printf("<%d>\n",count);
         打印abc*de的竖式和其后的空行
         count++;
     }
printf("The number of solutions = %d\n",count);

#include<stdio.h>
#include<string.h>

int main()
{
	int count=0;
	char s[20],buf[99];
	scanf("%s",s);
	for(int abc=111;abc<=999;abc++)
	    for(int de=11;de<=99;de++)
	    {
	    	int x = abc*(de%10),y = abc*(de/10), z = abc * de;
	    	sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);
	    	int ok = 1;
	    	for (int i=0;i < strlen(buf);i++)
	    	    if(strchr(s,buf[i]) == NULL)  ok = 0;
	    	if(ok)
	    	{
	    		printf("<%d>\n",++count);
	    		printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",abc,de,x,y,z);
			}
		}
		printf("The number of solution = %d\n",count);
		return 0;
}

关于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分别从文件写和读
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值