初学者之循环

一:穷举法

例题:我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

 意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只)

计算机的计算速度是非常快的,我们可以让他暴力的计算出所有的可能并从中找到正确的可能。

我们可以先确定大概的框架—-

​
#include <stdio.h>
int main()
{
	
	return 0;
}

​

 首先可以确定的是,公鸡最多22只,母鸡33只,小鸡仔叁佰只;

而从这里我们可以得到大概的框架:

​
	int cocks,hens,chicks;
	for(cocks=0;cocks<=20;cocks++){
		for(hens=0;hens<=33;hens++){
			for(chicks=0;chicks<=300;chicks++){
				
			}
		}
	}

​

而其中相对应的单词所代表的数字代表的是所对应种类个数,最后的小鸡仔的个数就是100减去前面两种种类的个数;

然后我们确定我们所需要的——即百钱买百鸡

if(5*cocks+3*hens+chicks/3.0==100)
			printf("cocks=%d,hens=%d,chicks=%d\n",cocks,hens,chicks);

运行结果如下:

 对于结果较多的穷举法,我们以可以在其中计入计数器:

#include <stdio.h>
int main()
{
	int one,two,five;
	int x;
	printf("请输入x元");
	scanf("%d",&x);
	int cnt=0;
	for(one=0;one<=100;one++){
		for(two=0;two<=50;two++){
			for(five=0;five<=20;five++){
				if(one*1+two*2+five*5==100*x){
					printf("%d个一分%d个两分和%d个五分组成%d元\n",one,two,five,x);
					cnt+=1;
				}
			}
		}
	}
	printf("%d",cnt);
	return 0;
	
}

 二:辗转相除法求最大公约数

(辗转相除法求最大公约数大家可以借鉴数学,不在c语言范畴内了^-^)

方法如下:

​
#include <stdio.h>
int main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	int c=0;
	while(b!=0){
		c=a%b;
		a=b;
		b=c;
	}
	printf("%d",a); 
}

​

当然也可以使用枚举法,更好理解但是复杂,不推荐使用

(从我看的网课截下来的)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值