编程的趣味函数

这篇博客探讨了四个有趣的编程挑战,包括中国古代的百钱百鸡问题、爱因斯坦的数学阶梯题、人民币分币兑换问题以及三色球组合问题。通过设置变量和条件,利用循环和判断解决这些数学难题,展示了编程在解决问题上的魅力。

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

今天我们来练习几个趣味的函数求解,函数虽然不难,不过要注意循环的使用和相应判断:

 

题目如下:

1.百钱百鸡问题:

 

 中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡”的问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁,母,雏各几何?

 

题目分析:

 

设鸡翁,鸡母,鸡雏的个数分别为x,y,z,提议给定共100钱买百鸡,若全买公鸡最多买20只,显然x ~0--20),同理,y~(0--33);并且 5x + 3y + z/3  = 100;

                                     x + y + z = 100;

 

程序如下:

 

#include <stdio.h>

int main()
{
    int x;
	int y;
	int z;
	int j = 0;
	
	printf("Following are possible plan to buy 100 fowls with 100 yuan:\n");
	
	for(x = 0; x <= 20; x++)
	{
	    for(y = 0; y <=33; y++)
		{
		    z = 100 - x - y;
			
			if(z % 3 == 0 && 5 * x + 3 * y + z / 3 == 100)
			{
			    printf("%2d:cock=%2d hen=%2d chicken=%2d\n",++j, x, y, z);	
			}			
		}	
	}
	
	return 0;	
} 

 

 

2.爱因斯坦的数学题:

 

 爱因斯坦出了这样一个数学题:有一条长阶梯,若每步跨两阶,则最后剩1 阶;若每步跨3阶则最后剩两阶;若每布跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;只有每步跨7阶,最后才正好一阶不剩;

 

问题分析:

  阶梯数满足下面一组同余式:

                            X = 1  (mod2)

                            X = 2  (mod3)

                            X = 4  (mod5)

                            X = 5  (mod6)

                            X = 0  (mod7)

 

程序如下:

#include <stdio.h>

int main()
{
	int i = 1;
	
	while(!((i%2==1) && (i%3==2) && (i%5==4) && (i%6==5) &&(i%7==0)))
	{
		++i;
	}
	
	printf("Staris_number= %d\n",i);
	
	return 0;
}

 

 

 

3.换分币:

 

   用一元人民币兑换成1分,2分和5分硬币,共有多少种兑换方法?

 

问题分析:

 

i, j , k 分别为兑换的 1分,2分和5分硬币所具有的钱数(i / 1j/2, k/5 则为对应的数目),则i,j,k 满足:i  +  j  +   z   =   100;

程序如下:

 

#include <stdio.h>

int main()
{
	int i;
	int j;
	int k;
	int count = 1;
	
	printf("There are following small exchange plans for 1 yuan note:\n");
	
	for(i = 0; i <= 100; i++)
	{
		for(j = 0; j <= 100-i; j=j+2)
		{
			for(k = 0; k <= 100-i-2*j; k=k+5)
			{
				if(i + j + k == 100)
				{
					printf(count%4?"%d:1*%d+2*%d+5*%d\n":
					       "%d:1*%d+2*%d+5*%d\n", count++, i, j/2, k/5);
					printf("\n");
				}
			}
		}
	}
	
	return 0;
}


 

4.三色球问题:

 

  若一个口袋中放有12个球,其中三个红的,3个白的和6个黑的,问任取8个球,共有多少种颜色搭配?

 

问题分析:

 

设取出的红球,白球数目分别为 i j,则黑球数目为为8 - i - j; 根据题意,红球和白球取值为(0~3),所以此时黑球个数应为(8 - i - j)  <=  6

 

程序如下:

#include <stdio.h>

int main()
{
	int i;
	int j;
	int count = 0;
	
	printf("No.   RED BALL  WHITE BALL  BLACK BALL\n");
	printf("--------------------------------\n");
	
	for(i = 0; i <= 3; i++)
	{
		for(j = 0; j <= 3; j++)
		{
			if((8-i-j) <= 6)
			{
				printf("%2d:      %d           %d           %d\n", ++count, i, j, 8-i-j);
			}
		}
	}
	
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值