实验3 函数

猴子吃桃

/*猴子吃桃问题。猴子第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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值