• 1160 Forever – PAT甲级真题


    “Forever number” is a positive integer A with K digits, satisfying the following constrains:

    • the sum of all the digits of A is m;
    • the sum of all the digits of A+1 is n; and
    • the greatest common divisor of m and n is a prime number which is greater than 2.

    Now you are supposed to find these forever numbers.

    Input Specification:

    Each input file contains one test case. For each test case, the first line contains a positive integer N (≤5). Then N lines follow, each gives a pair of K (3<K<10) and m (1<m<90), of which the meanings are given in the problem description.

    Output Specification:

    For each pair of K and m, first print in a line Case X, where X is the case index (starts from 1). Then print n and A in the following line. The numbers must be separated by a space. If the solution is not unique, output in the ascending order of n. If still not unique, output in the ascending order of A. If there is no solution, output No Solution.

    Sample Input:

    2
    6 45
    7 80

    Sample Output:

    Case 1
    10 189999
    10 279999
    10 369999
    10 459999
    10 549999
    10 639999
    10 729999
    10 819999
    10 909999
    Case 2
    No Solution

    题目大意:“天长地久数”是指一个K位正整数A,其满足条件为A的各位数字之和为m,A+1的各位数字之和为n,且m与n的最大公约数是一个大于2的素数。本题就请你找出这些天长地久数。输入在第一行给出正整数N(≤5),随后N行,每行给出一对K(3

    分析:sum记录A的各位数字之和,sum2记录A+1的各位数字之和,I与II分别为数A与A+1。由打表观察可得,所有天长地久数最后两位为”99″,那么将末尾的两个’9’隐藏后可直接带入暴力循环判断。将所有可能答案存储后排序输出即可~

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. struct node {
    7. int n, num;
    8. friend bool operator < (node &a, node &b) {
    9. if (a.n != b.n) return a.n < b.n;
    10. return a.num < b.num;
    11. }
    12. }T;
    13. int N, K, m, temp, sum, sum2, I, II;
    14. vector A;
    15. int is_prime(int x) {
    16. if (x <= 2) return 0;
    17. for (int i = 2; i <= sqrt(x); i++) {
    18. if (x % i == 0) return 0;
    19. }
    20. return 1;
    21. }
    22. int main() {
    23. cin >> N;
    24. for (int i = 1 ; i <= N; i++) {
    25. A.clear();
    26. cout << "Case " << i << '\n';
    27. cin >> K >> m;
    28. if (K * 9 < m) cout << "No Solution\n";
    29. else {
    30. temp = pow(10, K - 2);
    31. for (int i = temp / 10; i < temp; i++) {
    32. sum = 18, sum2 = 0, I = i, II = i + 1;
    33. while (I) {
    34. sum += I % 10;
    35. I /= 10;
    36. if (sum > m) break;
    37. }
    38. while (II) {
    39. sum2 += II % 10;
    40. II /= 10;
    41. }
    42. if (sum == m && is_prime(__gcd(m, sum2))) {
    43. T.n = sum2, T.num = i;
    44. A.push_back(T);
    45. }
    46. }
    47. sort(A.begin(), A.end());
    48. if (A.empty()) cout << "No Solution\n";
    49. for (auto &it : A) {
    50. cout << it.n << ' ' << it.num << "99\n";
    51. }
    52. }
    53. }
    54. return 0;
    55. }

  • 相关阅读:
    井盖异动传感器丨井盖状态监测仪助力排水管网系统装上“眼睛”
    【EMQX】 Spring Cloud 集成MQTT并异步入库(mongodb)
    有哪些常见的网络带宽和延迟问题
    第9章 【MySQL】InnoDB的表空间
    access与trunk详细解析+区别
    编程狂人|Go内存管理一文足矣
    无线路由器设置成交换机
    解密Linux中的通用块层:加速存储系统,提升系统性能
    数据加载及预处理
    自动驾驶技术的基础知识
  • 原文地址:https://blog.csdn.net/liuchuo/article/details/126223190