(1)数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根。如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。比如,对于24来说,把2和4相加得到6,由于6是一位数,因此6是24的数根。再比如39,把3和9加起来得到12,由于12不是一位数,因此还得把1和2加起来,最后得到3,这是一个一位数,因此3是39的数根。
输入格式:一个正整数(小于10')。
输出格式:一个数字,即输入数字的数根。输入样例:
24
输出样例:
6
答案:
#include <iostream>
using namespace std;
int f(int a)
{
int s=0; //s代表累加和数
int b=1; //b代表削10剩数,设计为1开始循环
int c=0; //c代表削10的余数
if (a<10)
{
return a;
}
else
{
while (b>0)
{
b=a/10;
c=a%10;
s=s+c;
a=b;
}
return f(s);
}
}
int main()
{
int n;
cin >> n;
cout << f(n) << endl;
return 0;
}
(2)Pell数列a1,a2,az...的定义是这样的:a,=1,a2=2,..., an=2*an-1+ an-2(n>2)。给出一个正整数k,要求Pell数列的第k项模上32767是多少。
输入格式:第1行是测试数据的组数n;后面跟着n行输入。每组测试数据占1行,包括一个正整数k(1<=k<1000000)。
输出格式:n行,每行输出对应一个输入。输出应是一个非负整数。
输入样例:
2
1
8
输出样例:
1
408
答案:
#include <iostream>
using namespace std;
int pell(int k) {
if (k == 1) return 1 ;
if (k == 2) return 2 ;
return 2 * pell(k-1) + pell(k-2);
}
int main() {
int n, k;
cin >> n;
while (n--) {
cin >> k;
cout << pell(k)%32767 << endl;
}
return 0;
}
(3)树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级;或者第一次走一级,第二次走两级;也可以第一次走两级,第二次走一级,一共3种方法。
输入格式:若干行,每行包含一个正整数N(1<=N<=30),代表楼梯级数。
输出格式:不同的走法数,每行输入对应1行输出。输入样例:
5810
输出样例:
8
3489
答案:
#include <iostream>
using namespace std;
int f(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
return f(n - 1) + f(n - 2);
}
int main() {
int n;
while (cin >> n) {
cout << f(n) << endl;
}
return 0;
}
(4)把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的放法(放法数用K表示)?5,1,1和1,5,1是同一种放法。
输入格式:第1行是测试数据的数目t(0<=t<=20);以下每行均包含两个整数M和N(1<=M,N<=10),以空格分开。
输出格式:对输入的每组数据M和N,用1行输出相应的K。输入样例:
1
73
输出样例:
8