猴子吃桃
/*猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;
第2天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;
以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。
输入1~10中的任意一个数,查询该天猴子剩下多少桃子?
要求用递归函数实现问题求解。
10
1*/
#include<iostream>
using namespace std;
int main()
{
int s(int);
int n;
cin >> n;
cout << s(n) << endl;
return 0;
}
int s(int n)
{
if (n == 10)
return 1;
else
return (s(n+1) + 1) * 2;
}
输出大于等于n的最小的完全平方数
/*若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数,如4=2*2,9=3*3等。
编写子函数,输出大于等于n的最小的完全平方数,并在主函数中调用之。
10
16*/
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
void m(int);
int n;
cin >> n;
m(n);
}
void m(int n)
{
int a;
for (n; 1; n++)
{
a = sqrt(n);
if (a * a == n)
{
cout << n << endl;
break;
}
}
}
实验一 设计判断数字类型的函数
/*编写具有如下原型的函数:bool f(long x);其功能为:若整数 x 仅由偶数字(0、2、4、6、8)组成时(如 x=26480),函数返回 true,否则返回 false(如当 x=22034 时)。
并编制主函数对它进行调用。
26480
true
26380
false*/
#include<iostream>
using namespace std;
bool f(long x);
int main()
{
long x;
cin >> x;
if (f(x))
cout << "true";
else
cout << "false";
return 0;
}
bool f(long x)
{
bool b=1;
for (x; x != 0; x /= 10) //逐位
{
if (x % 2 != 0) //判断是否偶数
{
b = 0;
break;
}
}
return b;
}
实验二 找出一定范围内的素数
/*编写具有如下原型的函数:void find(int i, int n); 实现从 i 开始找起,连续找出 n 个素数并显示在屏幕上。
如:实参为10 和 8 后,输出的 8 个素数应为:11,13,17,19,23,29,31,37。
13 4
13 17 19 23*/#include<iostream>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
void find(int, int);
int i, n;
cin >> i >> n;
find( i, n);
return 0;
}
void find(int i, int n)
{
int count=0,a,c;
for (count = 0; count < n;i++) //输出个数判断
{
c = sqrt(double(i)); //素数判断
for (a = 2; a <= c; a++)
{
if (i % a == 0)
break;
}
if (a >= c + 1)
{
cout << i;
cout << " ";
count++;
}
}
}
实验三 输出一定范围内因子和最大的数及其因子和
/* 输入正整数start和end,找出从start到end这一区间段内哪一个数n的因子和最大,并将该n及其因子和maxSum作为结果输出。
例如,当start=10,end=15时,所求的n应该为12,而maxSum应该为16。
要求:设计函数计算n的因子和,其中因子和为包括1但不包括n本身的所有因子之和。
10 15
12 16*/
#include<iostream>
using namespace std;
int main()
{
int f(int);
int i, n,s,max,t; //分别为start end 因子和 因子和最大值标记 因子和最大对应数标记
cin >> i >> n;
s = f(i);
t = i; //标记初始值便于比较大小
max = s; //同上
for (i++; i <= n; i++)
{
s = f(i);
if (max < s)
{
max = s;
t = i;
}
}
cout << t << " " << max << endl;
return 0;
}
int f(int x) //求因子和函数
{
int i = 1,s=0;
for (i; i < x; i++)
{
if (x % i == 0)
s += i;
}
return s;
}
实验四 求回文数
/*编写具有如下原型的函数symm:bool symm(long n); 用来判断正整数n是否为“回文数”(正读与反读为大小相同的数),若是返回true,否则返false。
并编写主函数,通过调用symm,求出n以内所有满足下述特征的m:m和7*m以及3*m*m都是“回文数”,
如1,11,88,…(因为m=1,7*m=7,3*m*m=3;m=11,7*m=77,3*m*m=363;m=88,7*m=616,3*m*m=23232;…)。
1000
1 11 88 101 111*/#include<iostream>
using namespace std;
int main()
{
bool symm(long n);
int m,n;
int a = 0, b = 0, c = 0;
cin >> n;
for (m = 1; m <= n; m++) //逐个尝试m到n中各数是否满足题干条件
{
a = m;
b = 7 * m;
c = 3 * m * m;
if (symm(a) && symm(b) && symm(c))
cout << m << " ";
}
return 0;
}
bool symm(long m) //判断是否是回文数的函数
{
int s = 0, e = 0,n=m;
for (n; n > 0; n /= 10)
{
s *= 10;
e = n % 10;
s += e;
}
if (s == m)
return 1;
else
return 0;
}
实验五 求数与其反序数之和
/*键盘输入正整数 n,求出n与其反序数x之和并输出。例如,输入2038,n+x = 2038 +8302 =10340,输出应为10340。
要求:编写函数实现数据转换成反序数值。
2038
10340*/
#include<iostream>
using namespace std;
int main()
{
int f(int );
int n,s;
cin >> n;
s = n + f(n);
cout << s << endl;
return 0;
}
int f(int x) //求反序数函数
{
int e=0, s=0;
for (x; x > 0; x /= 10)
{
s = s * 10;
e = x % 10;
s = s + e;
}
return s;
}