H - Heir's Dilemma(打表或者暴力)

题目:
在这里插入图片描述在这里插入图片描述
思路:参考队友的代码,学了打表;一直以为是自己的方法太暴力,反思超时也不能一组数据也过不了。
后来让别人检查错误原因是,6位数组开小了,数组下标是从0开始的,0,1,2,3,4,5,6,至少得开7位的数组啊
AC代码
队友的打表法

#include <bits/stdc++.h>

using namespace std;
int x;
int a[6];
bool vis[10000000],vv[10];
int i,b;
void dabiao()
{
    for(i=123455;i<=987655;i++)
    {
        memset(vv,0,sizeof(vv));
        int flag=1;
        int x=i;
        while(x>0)
        {
            b=x%10;
            x=x/10;
            if(b==0||i%b!=0||vv[b])//新学到的标记是否出现
            {
                flag=0;
                break;
            }
            vv[b]=1;
        }
        if(flag==0) continue;
        else  if(flag==1) vis[i]=1;
    }
}
int main()
{
    ios::sync_with_stdio(0);
    int l,h;
    cin>>l>>h;
    memset(vis,0,sizeof(vis));
    dabiao();//打表把所有结果列出来
    int sum=0;
    for(int i=l; i<=h; i++)
    {
        if(vis[i])sum++;//需要判断某一值时直接利用打表的结果
    }
    cout<<sum<<endl;
    return 0;
}

参考别人的代码

#include <bits/stdc++.h>

using namespace std;
int x;
int f(int x)
{
    int vis[20]= {0};
    int now=x;
    while(now)
    {
        if(now%10==0)
        {
            return 0;
            break;
        }
        if(vis[now%10])
        {
            return 0;
            break;
        }
        if(x%(now%10)!=0)
        {
            return 0;
            break;
        }
        vis[now%10]=1;
        now /=10;
    }
    return 1;
}
int main()
{
    ios::sync_with_stdio(0);
    int l,h;
    cin>>l>>h;
    int sum=0;
    for(int i=l; i<=h; i++)
    {
        if(f(i))sum++;
    }
    cout<<sum<<endl;
    return 0;
}

自己的AC代码
太不容易了

#include <bits/stdc++.h>

using namespace std;
int x;
int a[10];
int f(int x)
{
    int t=x;
    int j;
    int flag=1;
    for(j=1; j<=6; j++)
    {
        a[j]=x%10;
        x=x/10;
        if(a[j]==0)
        {
         flag=0;
            break;

        }
        else if(t%a[j]!=0)
        {
         flag=0;
            break;

        }
    }
    for(int m=1;m<=6;m++)
    {
      for(int n=m+1;n<=6;n++)
      {
       if(a[m]==a[n]){ flag=0;break;}

      }
    }
    if(flag==1) return 1;
    else return 0;
}
int main()
{
    ios::sync_with_stdio(0);
    int l,b;
    cin>>l>>b;
    int sum=0;
    for(int i=l; i<=b; i++)
    {
        if(f(i)==1)sum++;
    }
    cout<<sum<<endl;
    return 0;
}
发布了90 篇原创文章 · 获赞 18 · 访问量 3381

猜你喜欢

转载自blog.csdn.net/sherry_zhen/article/details/102860281