1. 统计闰年
题目链接:http://csp.magu.ltd/problem/J0412
【问题描述】
编写程序,统计从 x x x 年到 y y y 年中闰年的数量并输出。
【题解代码】
#include <iostream>
using namespace std;
int main()
{
int x, y, cnt = 0;
cin >> x >> y;
for (int i = x; i <= y; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
cnt++;
}
cout << cnt << endl;
return 0;
}
2. 求斐波那契数列的某一项
题目链接:http://csp.magu.ltd/problem/J0413
【问题描述】
斐波那契数列,又称黄金分割数列,以兔子繁殖为例子而引入,故又称为“兔子数列”。
斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34…,即第1项是1,第2项是1,后面任意一项是它前面两项的和。
编写程序,要求数列的第n个数是多少(n是不大于40的正整数)。
【题解代码】
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a = 1, b = 1, c;
if (n == 1 || n == 2) {
cout << 1;
return 0;
}
for (int i = 3; i <= n; i ++) {
c = a + b;
a = b;
b = c;
}
cout << c;
return 0;
}
3. 求满足条件的数的个数
题目链接:http://csp.magu.ltd/problem/J0418
【问题描述】
编写程序,给定n个四位数,求出其中满足以下条件的数的个数。
个位上的数字减去千位的数字,再减去百位的数字,再减去十位的数字的结果大于零。
【题解代码】
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int cnt = 0;
while (n--)
{
int x;
cin >> x;
int g = x % 10, s = x / 10 % 10, b = x / 100 % 10, q = x / 1000 % 10;
if (g - q - b - s > 0)
cnt++;
}
cout << cnt;
return 0;
}
4. 求一个正整数的所有因子
题目链接:http://csp.magu.ltd/problem/J0414
【问题描述】
在数学中,对于正整数A和B,如果整数A能被B整除,就称B是A的因子。比如8的因子有1,2,4和8。
编写程序,输入一个正整数n,按从小到大输出n的所有因子。
【题解代码】
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
cout << i << " ";
}
return 0;
}
5. 求数根
题目链接:http://csp.magu.ltd/problem/J0415
【问题描述】
在数学中,数根是自然数的一种性质,换句话说,每个自然数都有一个数根。
数根是将一正整数的各个位上的数相加,若加完后得到的数是一位数,那么这个数就是数根;如果得到的数是两位或者两位以上的数,就再把它的各位数字相加…如此进行下去,直到得到的数是一个一位数为止。
例如,24,把2和4相加得到6,由于6是一个一位数,因此6是24的数根。
再例如39,把3和9相加得到12,由于12不是一位数,因此再把1和2相加,最后得到3,这是一个一位数,因此3是39的数根。
编写程序,输入一个正整数n,输出它的数根。
【题解代码】
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while (n >= 10)
{
int m = n;
int s = 0;
while (m)
{
s += m % 10;
m /= 10;
}
n = s;
}
cout << n << endl;
return 0;
}
6. 求最小的n
题目链接:http://csp.magu.ltd/problem/J0416
【问题描述】
对于公式 S = 1 + 1 / 2 + 1 / 3 … + 1 / n S=1+1/2+1/3…+1/n S=1+1/2+1/3…+1/n,编写程序,求正整数n最小为多少时,s的值不小于给定的k。
【题解代码】
#include <iostream>
using namespace std;
int main()
{
int k;
cin >> k;
double s = 0;
int n = 0;
while (s < k)
{
n++;
s += 1.0 / n;
}
cout << n << endl;
return 0;
}
7. 验证角谷猜想
题目链接:http://csp.magu.ltd/problem/J0417
【问题描述】
角谷猜想又称冰雹猜想。它首先流传于美国,不久传到欧洲,后来由一位叫角谷的日本人带到亚洲。因此被称为角谷猜想。
角谷猜想是这样的:任意给定一个正整数n,当n是偶数时,将它除以2,即将它变成n/2;当n是奇数时,就将它变成
3
n
+
1
3n+1
3n+1,对得到的结果再按照上述规则进行处理,若干步后,最终总能够得到1。例如,假定初始整数为5,按上述规则处理得到的结果分别为16 8 4 2 1
。
在上述演变过程中,将每一次出现的数字排列起来,就会出现一个数字序列。
编写程序,输入一个正整数n,按上述规则进行处理并输出从整数n到变换到1的数字序列。
【题解代码】
#include <iostream>
using namespace std;
int main()
{
long long n;
cin >> n;
if (n == 1)
{
cout << 1 << endl;
return 0;
}
while (n != 1)
{
if (n % 2 == 0) n /= 2;
else n = 3*n + 1;
cout << n << endl;
}
return 0;
}