【UASCO】牛式

题目描述

下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。

      * * *
   x    * *
    -------
      * * *
    * * *
    -------
    * * * *

数字只能取代*,当然第一位不能为0。 写一个程序找出所有的牛式。

输入

第一行,数字的个数n。
第二行:N个用空格分开的数字(每个数字都∈{1,2,3,4,5,6,7,8,9})。

输出

共一行,一个数字。表示牛式的总数。 下面是样例的那个牛式。

      2 2 2
    x   2 2
     ------
      4 4 4
    4 4 4
  ---------
    4 8 8 4

样例输入

 
5

2 3 4 6 8

样例输出

1

思路:若使用十二层for循环十分繁琐,而由题可知是三位数与两位数之间的乘法,得到一个四位数。

AC代码:
#include<stdio.h>
int main(void){
    int n,x;
    int sum=0;
    int a[10]={0};  //初始化0~9 不被使用
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        a[x]=1;     //使输入的数使用的状态改变为被使用,方便后面的判断
    }
    for(int i=100;i<1000;i++){   //判断i是三位数
        for(int j=10;j<100;j++){   //判断j是两位数
            if(a[i%10]==1&&a[i%100/10]==1&&a[i/100]==1&&a[j%10]==1&&a[j/10]==1&&100<i*(j%10)&&i*(j%10)<1000&&100<i*(j/10)&&i*(j/10)<1000&&i*j>1000&&i*j<10000){     //判断i*j是四位数 并判断每位的数是否是输入的数
                int c=i*j,d=i*(j%10),e=i*(j/10);
                if(a[c%10]==1&&a[c/10%10]==1&&a[c/100%10]==1&&a[c/1000]==1&&a[d%10]==1&&a[d%100/10]==1&&a[d/100]==1&&a[e%10]==1&&a[e%100/10]==1&&a[e/100]==1){    // 判断每位的数是否是输入的数
                    sum++;
                }
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值