(八) 8.2 循环的设计

循环结构的程序设计

3、循环语句应用举例

1.利用循环实现枚举算法:

枚举法,也称为穷举法,是指从可能的集合中一一枚举各个元素,用给定的约束条件判定哪些是无用的,哪些是有用的。能使命题成立者,即为问题的解。

采用枚举算法求解问题的基本思路为:

(1)确定枚举对象、枚举范围和判定条件;
(2)——枚举可能的解,验证是否是问题的解。

【例8.3】百钱买百鸡问题:有人有一百块钱,打算买一百只鸡。公鸡一只5元,母鸡一只3元,小鸡3只1元,求应各买多少?

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int x,y,z;
	for (x=0;x<=20;x++) //枚举公鸡的可能数量,最多为20
		for (y=0;y<=33;y++) //枚举母鸡可能数量,最多为33
			for (z=0;z<=100;z++){ //枚举小鸡可能数量,最多为100
				if (z%3==0&&x+y+z==100&&5*x+3*y+z/3==100) //约束条件
					cout<<"公鸡="<<x<<",母鸡="<<y<<",小鸡="<<z<<endl;
			}
	return 0;
}

运行结果

公鸡=0,母鸡=25,小鸡=75
公鸡=4,母鸡=18,小鸡=78
公鸡=8,母鸡=11,小鸡=81
公鸡=12,母鸡=4,小鸡=84

思考:用二重循环实现百钱百鸡问题

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int x,y,z;
	for (x=0;x<=20;x++) //枚举公鸡的可能数量,最多为20
		for (y=0;y<=33;y++) { //枚举母鸡可能数量,最多为33
			z=100-x-y;  //小鸡的数量根据约束条件求得
            if (z%3==0&&5*x+3*y+z/3==100) //约束条件
               cout<<"公鸡="<<x<<",母鸡="<<y<<",小鸡="<<z<<endl;
		}
	return 0;
}

2.利用循环实现迭代算法:

迭代法是一种不断用变量的旧值递推新值的求解方法。
采用迭代算法求解问题的基本思路为:

(1)确定迭代变量。
(2)建立迭代关系式。
(3)对迭代过程进行控制。

【例8.4】求斐波那契(Fibonacci)数列前40个数。斐波那契数列公式为:

f(1)=1(n=1)
f(2)=1(n=2)
f(n)=f(n-1)+f(n-2) (n>2)
确定迭代变量:f(n)
建立迭代关系式:f(n)=f(n-1)+f(n-2)
对迭代过程进行控制:Fibonacci数列的前40个数

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int i,f1=0,f2=1,fn; //迭代变量
	for(i=1;i<=40;i++) {    //迭代次数
        fn=f1+f2; //迭代关系式
        f1=f2,f2=fn; //f1和f2迭代前进
        cout<<f1<<endl;
	}
	return 0;
}
i=1,fn=1,f1=1,f2=1
i=2,fn=2,f1=1,f2=2
i=3,fn=3,f1=2,f2=3
i=4,fn=5,f1=3,f2=5

运行结果

1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值