网易 数位重排 模拟

题目描述

牛牛有一个正整数x,牛牛需要把数字x中的数位进行重排得到一个新数(不同于x的数),牛牛想知道这个新数是否可能是原x的倍数。请你来帮他解决这个问题。

输入描述:

输入包括t+1行,第一行包括一个整数t(1 ≤ t ≤ 10),
接下来t行,每行一个整数x(1 ≤ x ≤ 10^6)

输出描述:

对于每个x,如果可能重排之后变为自己的倍数输出"Possible", 否则输出"Impossible".

示例1

输入

2
14
1035

输出

Impossible
Possible
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
bool judge(int num1,int num2)
{
    int vis1[10];
    int vis2[10];
    memset(vis1,0,sizeof(vis1));
    memset(vis2,0,sizeof(vis2));
    while(num1)
    {
        int t=num1%10;
        vis1[t]++;
        num1/=10;
    }
    while(num2)
    {
        int t=num2%10;
        vis2[t]++;
        num2/=10;
    }
    for(int i=0;i<=9;++i)
    {
        if(vis1[i]!=vis2[i])
        {
            return false;
        }
    }
    return true;
}
int main()
{
    int t,num1;
    cin>>t;
    while(t--)
    {
        cin>>num1;
        int flag=0;
        for(int i=2;i<=9;++i)
        {
            int num2=num1*i;
            //cout<<num1<<" "<<num2<<endl;
            if(judge(num1,num2))
            {
                flag=1;
                break;
            }
        }
        if(flag)
        {
            cout<<"Possible"<<endl;
        }else 
        {
            cout<<"Impossible"<<endl;
        }
    }
    return 0;
}
Last modification:January 12th, 2020 at 12:24 am
如果觉得我的文章对你有用,请随意赞赏