C++——算法入门经典(2)

本文主要回顾C++的基础算法,适合初学者入门学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复习基础算法。

#include<iostream>
#include<iomanip>
#include<cmath>
#include<ctime>
using namespace std;
#define INF 1000000000 
#define maxn 105 

//数组 
int a[maxn];
//阶乘递归函数声明 //
int factorial(int n);
int main() 
{	
/*	int n;
	cin>>n;
	for(int i=1; i<=n; i++)
		cout<<i<<endl;
	return 0;
	*/
	
	//2-1 完全平方数 ,意思是数a是数b的平方 
	//法一 
/*	int flag=0;
	for(int i=1;i<10;i++)
		for(int j=0;j<10;j++)
		{
			// floor(x)返回不超过x的最大整数
			// sqrt(n) 对n开根号且四舍五入
			int	n = i*1100 + j*11;
			int	m = floor(sqrt(n) + 0.5);
			if(m*m == n)
			{
				cout<<n<<endl; 
				flag++;
			}			
		}
	cout<<"总共"<<flag<<"个完全平方数"<<endl;
*/
	//2-3 7744问题
	//法二 
/**	for(int x=1; ; x++)
	{
		int n = x*x;
		if(n < 1000) continue;
		if(n > 9999) break;
		int hi = n/100;
		int lo = n%100;
		if(hi/10 == hi%10 && lo/10 == lo%10)
			cout<<n<<endl;
	} 
*/ 
	// 2-4 3n+1问题
/*	long long n;
	int count = 0;
	cin>>n;
	while(n > 1) 
	{
		if(n%2 == 1)
			n = n*3 + 1;
		else
			n /= 2;
		count++;
	}
		cout<<count<<endl;
 	*/
	
	// 2-3 近似计算
/*	double sum = 0;
	//法一 
	for(int i=0; ;i++)
	{
		double result = 1.0/(i*2+1);
		if(i%2 == 1)
			sum -= result;
		else
			sum += result;
		if(result < 1e-6)
			break;
	}
	cout.setf(ios::fixed);
	cout<<setprecision(7)<<sum<<endl;

	//法二
	double result = 0;
	int i=0;
	do{
		result = 1.0/(i*2+1);
		if(i%2 == 1)
			sum -= result;
		else
			sum += result;
		i++;
	} while (result > 1e-6);	
	cout.setf(ios::fixed);
	cout<<setprecision(7)<<sum<<endl;
*/ 
	//2-4 阶乘之和
	//前两种方法都有bug,会溢出 
	//法一 
/*	int n,sum = 0;
	cin>>n;
	for(int i=1; i<=n; i++) 
	{
		int fac = 1;
		for(int k=1; k<=i; k++)
		 	fac *= k;
		sum += fac;
	}
	cout<<sum%1000000;
	
	//法二
	int n,sum=0;
	cin>>n;
	for(int i=1; i<=n; i++)
	{
		sum += factorial(i); 
	}
	cout<<sum%1000000; */
	
	//法三 
/*	const int MOD = 1000000;
	int n, sum=0;
	cin>>n;
	
	for(int i=1; i<=n; i++)
	{
		int factorial = 1;  //阶乘的初始数
		for(int j=1; j<=i; j++)
			factorial = (factorial*j % MOD);  //每步取模 
		sum = (sum + factorial) % MOD;
	} 
	cout<<sum<<endl;
	cout.setf(ios::fixed);
	//加个定时器,CLOCK_PER_SEC以s为单位 
	cout<<"time used = "<<setprecision(2)<<(double)clock()/CLOCKS_PER_SEC<<endl;
*/	

	//数据统计2 (有bug,最大值和最小值没有重置 ) 
/*	int x, n=0, s=0, kase=0; //kase为当前数据编号的计数器 
	while(scanf("%d",&n) == 1 && n)
	{
		int s=0, min=INF, max=-INF;
		for(int i=0; i<n; i++)
		{
			scanf("%d",&x);
			s+=x;
			if(x < min) min = x;
			if(x > max) max = x;
		}
		if(kase) printf("\n");
		printf("Case %d: %d %d %.3f\n", ++kase, min, max, (double)s/n);
	 } 

	 
	 //2-1 水仙花数
	for(int i=100; i<1000; i++)
	{
		int a=0, b=0, c=0, s=0;
		a = i%100%10; 
		b = (i-a)/10%10;
		c = (i-a-b)/100;
		s = a + b*10 + c*100;
		if(s == a*a*a+b*b*b+c*c*c)
			cout<<s<<endl;
	} 

	 
 	//韩信点兵
	int a, b, c, x=0;	
	bool flag = true;
	int n=1;
	while(scanf("%d %d %d", &a,&b,&c) == 3)
	{	
		for(int i=10;i<100;i++){
			
			if(i%3==a && i%5==b && i%7==c)
			{
				cout<<i;
				flag = false;
				break;
			} else {
				if(!flag)
				{
					cout<<"No answer";
					flag = true;
					break;
		 		} 
			}
		} 
	}
	
	 
	//倒三角形
	int n, f=0;
	cin>>n;
	for(int i=n;i>0;i--)
	{
		for(int j=1;j<2*i;j++)
		{
			cout<<"#";
		}
		cout<<endl;
		f++;
		for(int i=1;i<=f;i++)
		{
			cout<<" ";
		}
	}
 
	//子序列的和 
	int n , m;
	int kase=0;
	while(scanf("%d %d",&n,&m)!=0)
	{
		double sum=0;
		for(;n<=m;n++)
		{
			sum+=1.0/(n*n);
		}

		if(kase)
			printf("\n");
		printf("Case %d: %.5f",++kase,sum);
	}
		
 	
 	//分数化小数
	int a,b,c;
	int kase=0,flag=0;
	while(scanf("%d %d %d",&a, &b, &c)!=0)
	{
		double sum = 0.0;
		sum = 1.0*a/b;
		
		if(kase)
			printf("\n");
		printf("Case %d: %.*lf\n",++kase,c,sum);
	 } 
  
  
  	//数组逆序输出 
	int x, n=0;
	while(scanf("%d", &x) == 1)
		a[n++] = x;
	for(int i=n-1; i>=0; i--)
	{
		cout<<a[i];
	 } 
  */
 	
	return 0;
 
}

//阶乘 
 /*int factorial(int n){
	if(n==0 || n==1)
		return 1;
	else
		return n*factorial(n-1);
}
*/ 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值