算法-经点问题(鸡兔同笼,麦克劳林求pi,开灯问题)

1、鸡兔同笼问题

//已经鸡和兔的总数量为n 总腿数为m 输入 n,m 输出鸡和兔的数量
//分析:设鸡a只 兔b只 a+b=n 2a+4b=m a=(4n-m)/2 b=n-a

//鸡兔同笼
void ChickenRibbit()
{
	//已经鸡和兔的总数量为n 总腿数为m 输入 n,m 输出鸡和兔的数量
	//分析:设鸡a只 兔b只 则建设方式组a+b=n 2a+4b=m 解得a=(4n-m)/2 b=n-a
	int a, b ,m, n;
	scanf_s("%d%d", &n, &m);
	a = (4*n - m) / 2;
	b = n - a;
	if (m%2==1||a<0||b<0)
	{
		printf_s("无解\n");
	}
	else
	{
		printf_s("%d %d\n", a, b);
	}
}

2、麦克劳林公式近似值求pi


X=1 arctan 1= pi/4=1-1/3+1/5-1/7…

void approximateVal()
{
	double sum = 0;
	for (size_t i = 0; ; i++)
	{
		double term = 1.0 / (i * 2 + 1);
		if (i % 2 == 0)
		{
			sum += term;
		}
		else
		{
			sum -= term;
		}
		if (term < 1e-7)
		{
			break;
		}
	}
	printf_s("%.6f\tpi=%.10f\n", sum, sum * 4);
}


3、开灯问题

有n盏灯编号为1~n,第一个人把所有灯都打开,第二个人把编号为2的关掉,第三个人把3的倍数的开的关,关的开

以此类推 一共有K个人。问最后有哪些灯开着?

void openlight()
{
	int n, k, first=1;
	memset(a, 0, sizeof(a));
	scanf_s("%d%d", &n, &k);
	for(int i=1;i<=k;i++)
	{
		for(int j=1;j<=n;j++)
		{if(j%i==0)
		{
			a[j] = !a[j];
		}
			
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(a[i])
		{
			if(first)
			{
				first = 0;
			
			}
			else
			{
				printf_s(" ");
			}
			printf_s("%d", i);
		}
	}
	printf_s("\n");
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值