程序设计入门基础编程题一-----c语言

直扣题意暴力解法

1.近似值

【问题描述】
已知可以用下列公式计算π的近似值。给定一个π的近似值e,编程利用下列公式求得最接近e的近似值π,以及迭代次数n(大于等于1)。
π/2 = (2/1 x 2/3) x (4/3 x 4/5) x (6/5 x 6/7) x … x [2n/(2n-1)x2n/(2n+1)]
【输入形式】
从控制台输入e( e大于2.6666667,小于3.14159)的值。
【输出形式】
输出最接近e的近似值π,以及迭代次数n(以一个空格分隔,并且输出π时要求小数点后保留9位有效数字)。
【样例输入1】3.1201
【样例输出1】3.120149087 36
【样例1说明】
输入的π的近似值e为3.1201,当n为35时计算的π值为3.119547206,与给定e值之差的绝对值为0.000552794。当n为36时,计算的π值为3.120149087,与给定e值之差的绝对值为0.000049087,可以看出n为36时比n为35时求得的π值更接近给定的e值。并且n为36时求得的π值已经大于给定的e值,当n继续增大时,求得的π值将递增,所以利用上述计算公式求得的最接近e的近似值为3.120149087,对应的迭代次数为36。

这类题很明显只要跟着题意往下做即可,只需观察题意中数据的规律,利用数学规律解题,只要保证条件不混肴,想清楚再动手,多训练几题就熟能生巧了。(注意数据输入与输出的类型)

#include
int main()
{
	double n = 1;
	double e = 0, sum = 1, temp = 1;//观察题目关于Π为因变量关于n的函数是增函数
	scanf("%lf", &e);
	while (e - 2 * sum >= 0)
	{
		temp = sum;
		sum *= 4 * n * n / (4 * n * n - 1);
		n++;
	}
	if (2 * sum - e > e - 2 * temp)
		printf("%.9lf %.0lf", 2 * temp, n - 2);
	else 
		printf("%.9lf %.0lf", 2 * sum, --n);
	return 0;
}
  1. 迭乘式

对于迭乘类题目切忌数据溢出,若有过大的数值计算最好不用自建迭乘子函数,实在过大用 long long 类型或者double 类型存放。

  1. 类似斐波那契数列的基础题

/ 与 % 的多样用法

用 / 与%将不同位数的数字分离
1.水仙数

比较经典基础的应该是水仙数
一个三位的十进制整数,如果它的三个数位的数字立方和等于这个数的数值,则称它为一个“水仙数”
【输入形式】
从控制台输入两个整数(以空格分割),分别表示数据范围的下限m和上限n,且满足0<=m<=n<=10000。
【输出形式】
向控制台输出在该数据范围内(包括数据的上下限)的所有“水仙数”,以从小到大的顺序显示在一行上,各数之间以空格分割。
【样例输入1】50 370
【样例输出1】 153 370
【样例1说明】
输入的数据范围下限为50,上限为370。因为要求水仙数为三位数,所以实际上就是求100~370之间的 水仙数,由于13 + 53 + 33 = 153,33 + 73 + 03 = 370,因此该范围内的水仙数为153和370(包括上限370)。

#include
int main()
{
	int m, n,num=0;
	scanf("%d%d", &m, &n);
	int sum = 0,temp;
	for (; m <= n; m++)
	{
		num = m;
		sum = 0;
		temp = 10000;
		while (temp >=10)
		{
			temp /= 10;
			sum += num / temp * (num / temp )*( num / temp);//记得括号
			num -= num / temp * temp;
		}
		if (sum == m) 
			printf("%d ", m);//若要严谨空格输入输出用数组存放数据再输出
	}
	return 0;
}

你可能感兴趣的:(c)