迭代法,穷举法及其练习题
Posted 露西&哈特菲利亚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代法,穷举法及其练习题相关的知识,希望对你有一定的参考价值。
总结:
1、基本语法:
数据类型,类型转换,输入输出,运算符(条件运算符) ? :
2、分支语句:
有选择性的执行某行或某段代码
if ... else if ... else... --最主要,必须要记住并且灵活运用
switch ... case ... default... --看到要明白什么意思
分支嵌套:在符合一定条件的基础上继续判断其它条件
3、循环语句:
循环四要素:初始条件,循环条件,循环体,状态改变
for() //最常用,最好用,最清晰,最灵活
{
}
必须记住,掌握,灵活运用
while() //不够清晰
{
}
foreach() //遍历,数组,集合(泛型集合)
{
}
循环的嵌套:
一般只需要套两层循环就足够了,外面的循环走一遍,里面的循环会走一整遍
-------------------------------------------------------------------
!!!!中间变量的运用,要灵活掌握
-------------------------------------------------------------------
迭代法:
每次循环都要把某一个或多个变量不断放大,为的是下一次循环可以继续使用,最后达到最终的大小。
代表性的题:
1、累加求和
2、阶乘
3、折纸
int sum = 0;
for(int i=1;i<=10;i++)
{
sum += i;
}
穷举法:
将所有的可能性都走一遍,然后判断符合条件的可能性,单独拿出来。
基本用法:
int count = 0;
for (int i = 1; i <= 15; i++) //1分的硬币
{
for (int j = 1; j <= 7; j++)//2分的硬币
{
for (int u = 1; u <= 3; u++) //5分的硬币
{
if (i + (j * 2) + (u * 5) == 15) //判断这种可能性的硬币够不够15分
{
Console.WriteLine("1分的需要" + i + "个,2分的需要" + j + "个,5分的需要" + u + "个");
count++;
}
}
}
}
Console.WriteLine("总共有" + count + "种可能性!");
-------------------------------------------------------------------------------------------------
穷举练习题:
1、有三种硬币若干个,1分,2分,5分,如果要凑够1毛5,有哪些组合方式?
扩展:三种硬币最少都要有一个
int count = 0; //若初始条件 int i = 1/int j = 1/int h = 1 , //代表每一种价值的硬币在组合中必须有一个。 for (int i = 0; i <= 15; i++) { for (int j = 0; j <= 7; j++) { for (int h = 0; h <= 3; h++) { if (i + (j * 2) + (h * 5) == 15) { Console.WriteLine("一分的需要" + i + "个,两分的需要" + j + "个,五分的需要" + h + "个。"); count++; } } } } Console.WriteLine("符合要求的可能性有" + count + "种。");
2、小张过年发了100元购物券,他要买香皂(5元),牙刷(2元),洗发水(20元),想要正好把100元花完,有几种购买组合?
int a = 0; for (int i = 0; i <= 50; i++) { for (int j = 0; j <= 20; j++) { for (int k = 0; k <= 5; k++) { if ((i * 2) + (j * 5) + (k * 20) == 100) { Console.WriteLine("小张可以买到" + i + "块香皂," + j + "只牙刷," + k + "瓶洗发水。"); a++; } } } } Console.WriteLine("符合条件的可能性有" + a + "种。");
3、百鸡百钱,有100文钱,要买100只鸡回家。公鸡2文钱一只,母鸡1文钱一只,小鸡半文钱一只,该如何买?
int a = 0; for (int i = 0; i <= 50; i++) { for (int j = 0; j <= 100; j++) { for (int k = 0; k <= 200; k++) { if ((i * 2) + j + (k * 0.5) == 100)//k*0.5 不可以写作 k/2 ! 因其中的0.5必须是固定的 { if (i + j + k == 100) { Console.WriteLine("公鸡" + i + "只,母鸡" + j + "只,小鸡" + k + "只。"); a++; } } } } } Console.WriteLine("一共有" + a + "种");
以上是关于迭代法,穷举法及其练习题的主要内容,如果未能解决你的问题,请参考以下文章