当前位置: 代码迷 >> 综合 >> PAT (Advanced Level) Practice 1001~1020
  详细解决方案

PAT (Advanced Level) Practice 1001~1020

热度:66   发布时间:2023-11-22 08:49:19.0

文章目录

  • 1001
  • 1002
  • 1003
  • 1004
  • 1005
  • 1006
  • 1007
  • 1008 Elevator
  • 1009
  • 1010
  • 1011
  • 1012
  • 1013
  • 1014
  • 1015 Reversible Primes
  • 1016
  • 1017
  • 1018
  • 1019
  • 1020

1001


1002


1003


1004


1005


1006


1007


1008 Elevator

注意:

  • 要注意输入数字序列的第一个数字是 n 而不是楼层。
  • 实际情况下, 不仅要考虑到电梯的上升下降,还需要考虑继续等待的情况。比如出现连续的两个1,就表明需要在当前楼层多等待5秒。
  • 到达输入序列的最后一个楼层后依然要等待5秒,不要进行特判。
#include<cstdio>
using namespace std;int main()
{
    int n, total; // total 为总花费时间int preFloor, newFloor; // preFloor 为当前楼层, newFloor 为要去的楼层scanf("%d", &n);total = preFloor = 0; // 初始化while (n--){
    scanf("%d", &newFloor); // 输入要去的楼层if (newFloor > preFloor) // 如果需要上升{
    total += (newFloor - preFloor) * 6 + 5;}else // 如果需要下降或者继续等待{
    total += (preFloor - newFloor) * 4 + 5;}preFloor = newFloor; // 更新当前楼层的值}printf("%d\n", total);return 0;
}

1009


1010


1011


1012


1013


1014


1015 Reversible Primes

题意:
给出正整数 N 和进制 D,如果 N 是素数,且 N 在进制 D 下反转后的数在十进制下也是素数,则输出“Yes";否则输出“No”。比如73是素数,在十进制下反转后得到的37也是素数,所以输出“Yes”。23是素数,其二进制表示为10111,反转后得到的11101在十进制下为29,也是素数,所以输出“Yes”。

思路:

  1. 判断 N 是否是素数:如果是素数,则进入步骤2;如果不是素数,则输出“No",结束算法。
  2. 将 N 转换为 D 进制,并保存于数组中。然后采用“逆序遍历”的方式重新转换为十进制(逆序遍历数组等价于将数组颠倒)。如果转换后的数为素数,则输出“Yes”;否则,输出“No”。

注意点:

  • 也可使用 while(scnaf("%d", &n) != EOF) 的写法,此时在 while 循环内就要加一个 if (n < 0) break; 的判断条件。
  • 题目描述中保证了0不作为输入,但要注意当 n 等于1时,需要输出“No”。
#include <iostream>
#include <cstdio>
using namespace std;bool isPrime(int n)
{
    if (n <= 1) return false;for (int i = 2; i * i <= n;  ++i)if (n % i == 0)return false;return true;
}int radix[111];int main()
{
    int n, d;cin >> n; // 整数 n 和进制 dwhile (n > 0) // n 大于0时循环{
    cin >> d;if (isPrime(n) == false) // n 不是素数,输出 NOprintf("No\n");else // n 是素数,判断 n 在进制 d 下的逆序是不是素数{
    int len = 0;do // 进制转换{
    radix[len++] = n % d;n /= d;} while (n != 0);for (int i = 0; i < len; ++i) // 按逆序转换进制n = n * d + radix[i];if (isPrime(n) == true) // 逆序是素数printf("Yes\n");else printf("No\n"); // 逆序不是素数}cin >> n;}return 0;
}

1016


1017


1018


1019


1020


一定要自己写一遍哦~~

  相关解决方案