首页 > 学院 > 开发设计 > 正文

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

2019-11-06 07:54:25
字体:
来源:转载
供稿:网友

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");}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表