题目合集2

目录

反向输出数字(数组)

阶乘求和

求和训练

输出水仙花数

完数的判断

短信计费

计算数列的前n项和

猴子吃桃

自由落体路程和弹起高度

打印等腰直角三角形

递归式子计算平方根


反向输出数字(数组)

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
	long n;
	while (cin >> n)
	{
		int a[5];
		int i = 0;
		int j = 0;
		for (i = 0; n >= 1; i++)
		{
			a[i] = n % 10;
			n = n / 10;
		}
		cout << i << endl;
		for (j = i - 1; j >= 0; j--)
		{
			if (j != i-1) cout << " ";  //注意好这里的条件!!
			cout << a[j];
		}
		cout << endl;
		for (j = 0; j <i; j++)  //注意数组的下标是比长度少一的!!
		{
			cout << a[j];
		}
		cout << endl;
	}
	return 0;
}

阶乘求和

#include <iostream>
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
		long long sum = 0, a = 1;
		for (int i = 1; i <= n; i++)
		{
			a = a * i;
			sum = sum+a;
		}
		cout << sum << endl;
	}
	return 0;
}

 注意数据溢出!!!!!!!要设置为long long!!!!


求和训练

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
	int a,b,c;
	while (cin >> a>>b>>c)
	{
		int suma = 0, sumb = 0;
		int aa = 0, bb = 1;
		float cc = 0;
		float sumc = 0, sum = 0;
		for (int i = 1; i <= a; i++)
		{
			suma += i;
		}
		for (int i = 1; i <= b; i++)
		{
			sumb += i*i;
		}
		for (float i = 1; i <= c; i++)
		{
			sumc += 1.0/i;  //!!!!!
		}
		sum = suma + sumb + sumc;
		cout << fixed << setprecision(2) << sum << endl;
	}
	return 0;
}

类似的递增求和:sum1+=(每一项是什么),每一项通过i来实现

注意i的类型


输出水仙花数

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
	for (int i = 100; i <= 999; i++) //限制三位数
	{
		int n = i;   //注意这个n很关键!!!!!!
		int a = 0, b = 0, c = 0;
		int sum = 0;

		c = i % 10;
		i = i/10;

		b = i % 10;
		i = i/10;  //i的值被改变了!!所以输出n!!!

		a = i % 10;
		
		sum = a * a * a + b * b * b + c * c * c;

		if (n == sum)
		{
			cout << n << endl;
		}
		i = n;
	}
	return 0;
}

倘若不用n,那么式子一步到位即可,比如c=i%10,b=(i/10)%10,a=i/100


完数的判断

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
		for (int i = 1; i <= n; i++) //一个数,i的值才是这个数字!!
		{
			int a[1000];
			int sum = 0,x=0;
			for (int j = 1; j <=i-1; j++)  //找它的因子并储存
			{
				
				if (i % j == 0)
				{
					x++; //因子的个数
					a[x]=j; //将因子存入数组
					sum += j;  //因子加起来
				}
				
			}
			if (sum == i) //判断输出条件
			{
					cout << i << " its factors are";
					for (int k = 1; k <= x; k++)
					{
						cout << " " << a[k];
					}
					cout << endl;
			}
		}
	}
	return 0;
}

注意各部分功能的关系!!!并列or包含


短信计费

#include <iostream>
#include<iomanip>
using namespace std;
float cost(int);
int main()
{
	int n;
	while (cin >> n)
	{
		int num = 0;
		float sum = 0;
		for (int i = 1; i <= n; i++)
		{
			cin >> num;
			sum += cost(num);
		}
		cout << fixed << setprecision(1) << sum << endl;
	}
	return 0;
}
float cost(int Nwords)
{
	if (Nwords <= 70) return 0.1;
	if (Nwords > 70)
	{
		if (Nwords % 70 == 0) return Nwords / 70 * 0.1;  //注意这里哦!!!140和142字的钱是不一样的!!!
		else return (0.1 + (Nwords / 70) * 0.1);//这个式子很巧妙很巧妙,我只能说快点记住
	}
}


计算数列的前n项和

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n;  //要计算的项数
	while (cin >> n)
	{
		int a0 = 2, a1 = 3;//分子的第一、第二项
		int b0 = 1, b1 = 2; //分母的第一、第二项
		double sum=3.5;   //前两项的和
		int aa=0, bb=0;  //分子、分母的每一项
		double cc = 0;  //每一项
		for (int i = 3; i <= n; i++)  //您是从第三项开始加的,i要设置好哦!!!!
		{
			aa = a0 + a1;//分子计算
			a0 = a1;
			a1 = aa;
			bb = b0 + b1;//分母计算
			b0 = b1;
			b1 = bb;
			cc = aa*1.0 / bb*1.0;  //转换为浮点型!!!
			sum += cc;
		}
		cout <<fixed<<setprecision(2) << sum << endl;
	}
	return 0;
}

猴子吃桃

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n;//第n天,只剩下一个桃子
	while (cin >> n)
	{
		int sum = 1;  //倒推法!!!
		for (int i = n-1; i >= 1; i--)  //第n天并没有吃,第一天到第n-1天吃了
		{
			sum = (sum + 1) * 2;  //不用累加!!!
		}
		cout << sum << endl;
	}
	return 0;
}

自由落体路程和弹起高度

 

#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
	int m,n;
	while (cin >> m>>n)
	{
		double sumup = 0, sumdown = m,sum=0; //第n次落地时反弹的高度和下降的高度
		double down = 1,up=1;
		  //计算下降的高度
		
		for (int j = 1; j <= n-1; j++)  //2的n次方
		{
				down *= 2;
				sumdown += m/down;  
		}
			
		
		//计算反弹的高度
		
		for (int j = 1; j <= n; j++)  //2的n次方
		{
				up *= 2;
				sumup += m / up;
		}
			
		
		sum = sumup + sumdown-m/up;
		cout << fixed << setprecision(2) << m/up << " ";
		cout << fixed << setprecision(2) << sum << endl;
	}
	return 0;
}

找规律!!! 列出规律!!!得出式子!!!


打印等腰直角三角形

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
	int n;//边长
	char ch;
	while (cin >> n >> ch)
	{
		double l = 0;//直角边长
		if (ch == 'R')
		{
			for (int i = 1; i <= n; i++)    //i可看作行数,也可以说是次数
			{
				for (int j = 1; j <= i; j++) //输出符号
				{
					cout << "*";
				}
				for (int j = n-i-1; j >= 0; j--)   //差值是输出的空格的个数!!!
				{
					
					cout << " ";
				}
				cout << endl;
			}
		}
		if (ch == 'L')
		{
			for (int i = 1; i <= n; i++)
			{
				for (int j = n - i-1; j >=0; j--) 
				{
					
					cout << " ";
				}
				for (int j = 1; j <= i; j++) //输出符号
				{
					cout << "*";
				}
				cout << endl;
			}
		}
		l = sqrt(n*n*2);  //计算直角边长
		cout << fixed << setprecision(4) << l << endl;
	}
	return 0;
}

递归式子计算平方根

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main()
{
	int a;
	while (cin >> a)
	{
		double x0=1.0, x1=0;
		while(1)
		{   
			
			x1 = (x0 + a / x0) / 2.0;  
			if (fabs(x1 - x0) < 1e-5) break;  //判断输出条件
			x0 = x1;  //递归
		}
		cout<< fixed << setprecision(3) << x1 << endl;
	}
	return 0;
}

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值