时间限制 : 1 秒
内存限制 : 128 MB
有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周x(1≤x≤7)x(1≤x≤7) 开始算起,过了n(n≤10^6)n(n≤106)天以后,小鱼一共累计游泳了多少公里呢?
输入
输入两个整数x,n(表示从周x算起,经过n天)。
输出
输出一个整数,表示小鱼累计游泳了多少公里。
样例
输入
3 10
输出
2000
答案:
#include
int main() {
int x, n;
scanf("%d%d", &x, &n);
int sum = 0;
if (x <= 5) {
sum += 250 * (5 - x+1);
n = n -( 7 - x+1);
}
else if (x == 6) {
n = n - 2;
}
else if (x == 7) {
n = n-1;
}
int ret = n % 7;
if (ret == 0) {
sum =sum+ 250 * (n / 7)*5;
}
else if (ret!=0 && n % 7 == 6) {
sum = sum + 250 * (n / 7)*5 + 5 * 250;
}
else {
sum = sum + 250 * (n / 7)*5 + (n % 7) * 250;
}
printf("%d\n", sum);
return 0;
}
分析:题目是从x当天算,比如从第周四算起,到周五是经过了两天,很多人以为是经过经过5-4=1天,其实不是这样的。是走过5-4+1=2天。然后算出剩下的天数有几个周零几天即可算出答案。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
判断两个数是否互质(最大公约数为1)。
输入
一行,包含两个正整数m n (2<=m, n <= 1,000,000,000)
输出
若两数互质输出Yes,否则输出No
样例
输入
2 3
输出
Yes
答案:
#include
using namespace std;
bool isFlag(long int n,long int m) {
if (m == 1 || n == 1) {
return true;
}
long max = n > m ? n : m;
long min = n < m ? n : m;
while (min) {
int r = max % min;
max = min;
min = r;
}
if (max > 1) {
return false;
}
return true;
}
int main() {
long int n, m;
cin >> m>>n;
if (isFlag(m,n)) {
cout << "Yes";
}
else {
cout << "No";
}
return 0;
}
分析:什么是两个数互质?不是说两个数都是质数就是两个数互质,二是两个数的最大公约数仅仅是1,就是互质。因此1和任何数互质。0和任意数的最大公约数就是那个数本身。因为本题两个数字可能比较大,如果一步步判断两个数有没有公共的公约数是会超时的,得改进算法:
我们可以求两个数的最大公约数,如果最大公约数大于1,则他们不互质。如果为1,则互质。
这道题的核心是掌握求两个数最大公约数的求法。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。
例如:若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
请判断输入的整数n是否为回文数,如果是则输出Yes,否则输出No。
输入
整数n
输出
Yes/No
样例
输入
1221
输出
Yes
答案:
#include
using namespace std;
int main() {
int n;
cin >> n;
int temp = n;
int r = 0, sum = 0;
while (n) {
r = n % 10;
sum = r + sum * 10;
n /= 10;
}
if (sum == temp) {
cout << "Yes\n";
}
else {
cout << "No\n";
}
return 0;
}
分析:这个题其实不难,在刷OJ里面的题,好几个题都是类似的思想。本题相当于就是告诉我们要知道什么是回文数。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。
输入
输入一个数字(不一定是整数,小于100m),表示要游的目标距离。
输出
输出一个整数,表示小玉一共需要游多少步。
样例
输入
4.3
输出
3
答案:
#include
using namespace std;
int main() {
float x;
cin >> x;
float step= 2.0F;
float sum = 0.0F;
int count = 0;
while (sum < x) {
sum = sum + step;
count++;
step *= 0.98F;
}
cout << count;
return 0;
}
分析:这个题目很重要,这种题目可以换着花样变换。题目中关于小玉要走多少步,很多人在最后一步超越指定距离后不太好判断。我们只需要记住一点,只要当前距离严格小于指定距离,就要继续游泳。注意:是严格小于,当大于等于时说明已经到达追指定结点了。因此这个题最难的地方就是循环条件的判断,很多人写成小于等于了。注意不是小于等于,因为等于的时候说明已经达到指定的位置了,因此循环条件是严格小于。
是否通过:
时间限制 : 1 秒
内存限制 : 128 MB
素数(prime number)又称质数。素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。1不是素数。
如果输入的数是素数则输出Yes,否则输出No。
输入
正整数n(1<=n<=10^{12})(1<=n<=1012)
输出
如果是素数则输出Yes,否则输出No。
样例
输入
3
输出
Yes
答案:
#include
#include
using namespace std;
int main() {
long long n;
cin >> n;
bool flag = true;//为true是表示不是素数
for (register int i = 2; i <= sqrt(n); i++) {
if (n % i == 0&& n!= 2) {
flag = false;
break;
}
}
if (flag) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
return 0;
}
分析:素数又叫质数,就是除了它本身和1以外,没有其他因子的数。对于这道题,我们从2到该数的平方根,为什么循环判断条件是这个,不应该是小于等于n-1吗?其实也没错,但是那个没有优化,对判断一个素数我们从2到该数的平方根之间的所有数,看看他们和该数能不能整除,如果不能则是素数,只要有一个能整除则就不是素数。
是否通过: