算法竞赛入门经典 竖式问题

/*
**sprintf:输出到字符串,sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。
**函数原型:int sprintf( char *buffer, const char *format [, argument,...] );buffer是字符数组名;format是格式化字符串
** sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(s)求字符串的长度。
*/
 
/*
**strchr函数:char *strchr(char const *str,int ch);
**strchr函数找到后返回一个指向该位置的指针,如果不存在,返回一个NULL指针 
*/

#include<stdio.h>

#include<string.h>
int main()
{
  int i, ok, abc, de, x, y, z, count = 0;
  char s[20], buf[99];
  scanf("%s", s);
  
  for(abc = 111; abc <= 999; abc++)
    for(de = 11; de <= 99; de++) 
{
      x = abc*(de%10); y = abc*(de/10); z = abc*de;
      sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z);//buf数组每一个存储单元buf[i]只有一个数字 
      ok = 1;
      /*字符串查找函数,*/
      for(i = 0; i < strlen(buf); i++)
        if(strchr(s, buf[i]) == NULL) ok = 0;//如果在buf数组里的数字在s数组即输入的数字集合中 ,检查是否是一个合格的竖式 
        //如果找到了,返回一个指针,不等于NULL,进入下一次循环判断,ok依然=1; 
        
      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);
      }//打印竖式 
    }//for循环
 
  printf("The number of solutions = %d\n", count);
  return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值