[其它]lesson 7 计算机算法初步.ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int x, y, z;
lesson8_02.c
for( x=0; x<=100/5; x++ )
for( y=0; y<=100/3; y++ )
for( z=0; z<=100; z++ ) {
if (x+y+z ==100 &&15*x+9*y+z==300)
printf( “x=%d, y=%d, z=%d\n”, x, y, z );
穷举解题步骤:
1、问题解的可能搜索的范围:
用循环或循环嵌套结构实现
2、写出符合问题解的条件。
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
例1:判断给定整数是否是素数 。
所谓素数是指仅能被1和自身整除,且 大于等于2的数值。如7,11,17,23等
电气与信息工程学院计算机系张吴波制作
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
1、旅行途中发 现自己忘记了开 锁的密码,怎么 办?
2、从某个班中找出所有班干部,需要逐 一对每个同学进行查看,判断是否是班 干部。
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
穷举法的核心在于明确问题的所有可能性, 并针对每种可能情况逐个进行判断,最终找 出正确问题的答案。
scanf( “%d”, &x );
for (t = 2; t<x; t++ ) /* 列举小于x大于1的所有整数 */
if ( x%t == 0 )
break;
if ( t == x )
/* 是否通过循环条件出口 */
printf( “%d is prime\n”, x );
else
printf( “%d isn’t prime\n”, x ); lesson8_01.c
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
问题分析
从题目要求可知:公鸡、母鸡和小鸡的数量是有限 的,都不会超过100。通过对不同数量的公鸡、母 鸡和小鸡进行组合,可以计算出购买这些鸡所用的 花费,但这个题目要求找出那些花费正好100枚且 鸡的总数也为100只的情况。
因此,可以采用穷举法,将不同的公鸡、母鸡和小 鸡的数量枚举一遍,找出那些符合题目要求的解。
电气与信息工程学院计算机系张吴波制作
2019/5/12
算法描述
开始
0 x
x 加1
x <= 100/5 Y 0y
N y <= 10ห้องสมุดไป่ตู้/3 xY 0z
z 加1
z<=100
Y Y
条件判断
输出 x, y, z 电气与信息工程学院计算机系张吴波制作
N
结束
y 加1 N N
2019/5/12
#include <stdio.h> #include <math.h> int main( ) {
return 0;
}
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
例2:百钱买百鸡
“百钱买百鸡”是我国古代数学家张丘建提出的一个 著名的数学问题。假设某人有钱百枚,希望买一百只 鸡;不同的鸡价格不同,公鸡5枚钱一只,母鸡3枚钱 一只,而小鸡3只1枚钱。试问:如果用百枚钱买百只 鸡,可以包含几只公鸡、几只母鸡和几只小鸡。
t<x Y x%t==0 N t 加1
算法描述
N
Y
N
输出“不是素数 ”
t == x
Y
输出“是素数 ”
电气与信息工程学院计算机系张吴波制作
结束
2019/5/12
#include <stdio.h>
int main( )
注意判断是否是素数的条件与
{ int x, t;
判断位置
printf( “Enter an integer: ” );
2019/5/12
穷举法
32
问题分析 为了检查一个整数是不是素数,可以采用穷举法。 假设给定的整数用x表示,则判断过程就是确认x 不能整除以2~x-1之间的任何整数。这就需要一 一列举出2~x-1之间的每个整数进行排查。
电气与信息工程学院计算机系张吴波制作
2019/5/12
开始
输入x
2t
34
概述
递推是计算机数值计算中的一个重要算法。其基本 策略是将复杂的运算划分为可以重复操作的若干个 简单的运算,进而充分利用计算机擅长重复计算的 特点。
采用递推法进行问题求解的关键在于找出递推公式 和边界条件。
电气与信息工程学院计算机系张吴波制作
2019/5/12
递推与迭代法
34
例3:等比数列求和
等比数列是指在一组数据中,后项和前项之前存在着 一个固定的比例关系。例如:整数序列3、15、75、 375的初值是3,后项与前项是5倍的关系,即前项乘以 5得到后项。
本题要求给定等比序列的首项和比例,计算这个数列 的前10项之和。
电气与信息工程学院计算机系张吴波制作
2019/5/12
递推与迭代法
Lesson 8 计算机算法初步
电气与信息工程学院计算机系张吴波制作
2019/5/12
31 学习目标:
掌握几个常用的解题算法:枚举、迭代
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
概述 穷举法,又称为枚举法,是人们日常生活中常用 的一种求解问题的方法。 根据问题中的部分条件(已知的条件)将所有可 能解的情况列举出来,然后通过一一验证是否符 合整个问题的求解要求,而得到问题的解。
}
return 0;
}
电气与信息工程学院计算机系张吴波制作
2019/5/12
课堂练习
3
1、求所有的三位水仙花数
若一个3位自然数的各位数字的3次方之和 等于它本身,则称这个自然数为水仙花数。
例如:153(153=13+33+53)是水仙花数
电气与信息工程学院计算机系张吴波制作
2019/5/12
递推与迭代法
34
问题分析
等比数列的递推公式为:
itemi = itemi-1 * ratio sumi = sumi-1 + itemi
后项等于前项乘以比例值 前i项之和等于前i-1项之和加当前项
由于在重复上述递推计算之前,需要将第1项的值累加到
sum中,所以,需要先将item存入sum中。
电气与信息工程学院计算机系张吴波制作
2019/5/12
算法描述
开始
输入 item, ratio
item sum 1 i
i加1
i < 10
N
Y
item*ratio item 加一
sum+itemsum
lesson8_02.c
for( x=0; x<=100/5; x++ )
for( y=0; y<=100/3; y++ )
for( z=0; z<=100; z++ ) {
if (x+y+z ==100 &&15*x+9*y+z==300)
printf( “x=%d, y=%d, z=%d\n”, x, y, z );
穷举解题步骤:
1、问题解的可能搜索的范围:
用循环或循环嵌套结构实现
2、写出符合问题解的条件。
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
例1:判断给定整数是否是素数 。
所谓素数是指仅能被1和自身整除,且 大于等于2的数值。如7,11,17,23等
电气与信息工程学院计算机系张吴波制作
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
1、旅行途中发 现自己忘记了开 锁的密码,怎么 办?
2、从某个班中找出所有班干部,需要逐 一对每个同学进行查看,判断是否是班 干部。
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
穷举法的核心在于明确问题的所有可能性, 并针对每种可能情况逐个进行判断,最终找 出正确问题的答案。
scanf( “%d”, &x );
for (t = 2; t<x; t++ ) /* 列举小于x大于1的所有整数 */
if ( x%t == 0 )
break;
if ( t == x )
/* 是否通过循环条件出口 */
printf( “%d is prime\n”, x );
else
printf( “%d isn’t prime\n”, x ); lesson8_01.c
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
问题分析
从题目要求可知:公鸡、母鸡和小鸡的数量是有限 的,都不会超过100。通过对不同数量的公鸡、母 鸡和小鸡进行组合,可以计算出购买这些鸡所用的 花费,但这个题目要求找出那些花费正好100枚且 鸡的总数也为100只的情况。
因此,可以采用穷举法,将不同的公鸡、母鸡和小 鸡的数量枚举一遍,找出那些符合题目要求的解。
电气与信息工程学院计算机系张吴波制作
2019/5/12
算法描述
开始
0 x
x 加1
x <= 100/5 Y 0y
N y <= 10ห้องสมุดไป่ตู้/3 xY 0z
z 加1
z<=100
Y Y
条件判断
输出 x, y, z 电气与信息工程学院计算机系张吴波制作
N
结束
y 加1 N N
2019/5/12
#include <stdio.h> #include <math.h> int main( ) {
return 0;
}
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
例2:百钱买百鸡
“百钱买百鸡”是我国古代数学家张丘建提出的一个 著名的数学问题。假设某人有钱百枚,希望买一百只 鸡;不同的鸡价格不同,公鸡5枚钱一只,母鸡3枚钱 一只,而小鸡3只1枚钱。试问:如果用百枚钱买百只 鸡,可以包含几只公鸡、几只母鸡和几只小鸡。
t<x Y x%t==0 N t 加1
算法描述
N
Y
N
输出“不是素数 ”
t == x
Y
输出“是素数 ”
电气与信息工程学院计算机系张吴波制作
结束
2019/5/12
#include <stdio.h>
int main( )
注意判断是否是素数的条件与
{ int x, t;
判断位置
printf( “Enter an integer: ” );
2019/5/12
穷举法
32
问题分析 为了检查一个整数是不是素数,可以采用穷举法。 假设给定的整数用x表示,则判断过程就是确认x 不能整除以2~x-1之间的任何整数。这就需要一 一列举出2~x-1之间的每个整数进行排查。
电气与信息工程学院计算机系张吴波制作
2019/5/12
开始
输入x
2t
34
概述
递推是计算机数值计算中的一个重要算法。其基本 策略是将复杂的运算划分为可以重复操作的若干个 简单的运算,进而充分利用计算机擅长重复计算的 特点。
采用递推法进行问题求解的关键在于找出递推公式 和边界条件。
电气与信息工程学院计算机系张吴波制作
2019/5/12
递推与迭代法
34
例3:等比数列求和
等比数列是指在一组数据中,后项和前项之前存在着 一个固定的比例关系。例如:整数序列3、15、75、 375的初值是3,后项与前项是5倍的关系,即前项乘以 5得到后项。
本题要求给定等比序列的首项和比例,计算这个数列 的前10项之和。
电气与信息工程学院计算机系张吴波制作
2019/5/12
递推与迭代法
Lesson 8 计算机算法初步
电气与信息工程学院计算机系张吴波制作
2019/5/12
31 学习目标:
掌握几个常用的解题算法:枚举、迭代
电气与信息工程学院计算机系张吴波制作
2019/5/12
穷举法
32
概述 穷举法,又称为枚举法,是人们日常生活中常用 的一种求解问题的方法。 根据问题中的部分条件(已知的条件)将所有可 能解的情况列举出来,然后通过一一验证是否符 合整个问题的求解要求,而得到问题的解。
}
return 0;
}
电气与信息工程学院计算机系张吴波制作
2019/5/12
课堂练习
3
1、求所有的三位水仙花数
若一个3位自然数的各位数字的3次方之和 等于它本身,则称这个自然数为水仙花数。
例如:153(153=13+33+53)是水仙花数
电气与信息工程学院计算机系张吴波制作
2019/5/12
递推与迭代法
34
问题分析
等比数列的递推公式为:
itemi = itemi-1 * ratio sumi = sumi-1 + itemi
后项等于前项乘以比例值 前i项之和等于前i-1项之和加当前项
由于在重复上述递推计算之前,需要将第1项的值累加到
sum中,所以,需要先将item存入sum中。
电气与信息工程学院计算机系张吴波制作
2019/5/12
算法描述
开始
输入 item, ratio
item sum 1 i
i加1
i < 10
N
Y
item*ratio item 加一
sum+itemsum