文章目录
- 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”。
思路:
- 判断 N 是否是素数:如果是素数,则进入步骤2;如果不是素数,则输出“No",结束算法。
- 将 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
一定要自己写一遍哦~~