网易2018编程题 数位重排

    xiaoxiao2022-07-05  178

    牛牛有一个正整数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

    这道题目使用模拟的方法,使用C++语言不用手动实现全排列,可以使用标准库函数提供的next_permutation函数实现全排列功能,当然这道题目还涉及到string和int的转化,相应的API函数要熟悉

    #include<iostream> #include<string> #include<algorithm> using namespace std; int main() { int T; cin >> T; while (T--) { int n; cin >> n; string s = to_string(n); sort(s.begin(), s.end()); bool flag = false; do { int p = stoi(s); // string 转为int if (p != n && p%n == 0) { flag = true; break; } } while (next_permutation(s.begin(), s.end())); cout << (flag ? "Possible" : "Impossible") << endl; } return 0; }

     

     

    最新回复(0)