这题要判断给出数字是否能构成几个数能满足题中所规定的式子要求。。一开始我想着是怎么通过这些数字来枚举每一行的数。。发现太麻烦了,而且复杂度很高。。后来发现前两个数的位数都是确定的,一个三位数和一个两位数,那我们就可以枚举[100,999]和[10,99】之间的数,然后通过模拟运算判断算出的答案是否是规定的数字中的。。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int flag[10]={0};
int isok(int n)
{
    if(!n)  return 0;
    while(n)
    {
        if(flag[n%10]==0)
            return 0;
        n/=10;
    }
    return 1;
}
int judge(int i,int j)
{
    int x=j%10,y=j/10;
    if(isok(i)&&isok(j)&&isok(i*x)&&i*x<1000&&isok(i*y)&&i*y<1000&&isok(i*j))
        return 1;
    return 0;
}
int main()
{
    int n,ans=0,i,j,x;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&x);
        flag[x]=1;
    }
    for(i=111;i<=999;i++)
        for(j=11;j<=99;j++)
            if(judge(i,j))
                ans++;
    printf("%d\n",ans);
    return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation