首页 > 代码库 > 穹举,迭代,while循环。
穹举,迭代,while循环。
所有循环 必要条件 : 初始条件(注意初始条件的位置) 循环条件 循环体 状态改变;
1.穷举
将所有可能性全部全部走一遍,使用IF筛选出满足的情况
使用循环语句 for 或者 while 语句 do 。。。while 语句 中间嵌套 if 语句
举例
1,
穷举:将所有可能性全部走一遍,使用if筛选出满足的情况
单位给发了一张150元购物卡,
拿着到超市买三类洗化用品。
洗发水15元,香皂2元,牙刷5元。
求刚好花完150元,有多少种买法,
每种买法都是各买几样?
洗发水 x 0~10
牙刷 y 0~30
香皂 z 0~75
int biao = 0;
int zong = 0;
for (int x = 0; x <= 10;x++ ) //for循环嵌套for循环, 最后用if 筛选出满足条件的情况;
{
for (int y = 0; y <= 30;y++ )
{
for (int z = 0; z <= 75;z++ )
{
zong++;
if(x*15+y*5+z*2==150)
{
biao++;
Console.WriteLine("第{0}种买法:洗发水{1}瓶,牙刷{2}支,香皂{3}块。",biao,x,y,z);
}
}
}
}
Console.WriteLine("总共有"+biao+"种买法。");
Console.WriteLine("总共走了"+zong+"遍才找到了"+biao+"种符合的情况。");
2.迭代
从初始情况按照规律不断求解中间情况,最终推导出结果。
举例:
(1)
第一天1分钱,第二天2分钱,第三天4分钱,以此类推
40天
问,总共收了多少钱?
double sum = 0;
double qian = 1;
for (int i = 1; i <= 40;i++ )
{
if (i == 1)
{
sum += qian;
}
else
{
qian *= 2;
sum += qian;
}
}
Console.WriteLine("总共接收了"+(sum/100)+"元。");
(2)
Console.Write("请输入月数:");
int m = int.Parse(Console.ReadLine());
int ct = 0;//成兔对数ct
int xt = 0;//小兔对数xt
int yt = 1;//幼兔对数yt
int zt = 1;//总兔对数zt
for (int i = 1; i <= m; i++)
{
if (i == 1)//定义第一个月的成兔幼兔小兔对数
{//(告诉电脑第一个月时兔子对数) //第一个月情况特殊 单独列出;
ct = 0;//第一个月成兔对数=0
xt = 0;//第一个月小兔对数=0
yt = 1;//第一个月幼兔对数=1
}
else
{
ct = xt + ct;//每月成兔对数等于上月小兔对数+上月成兔对数①
xt = yt;//每月小兔对数等于上月幼兔对数 ② // 等号左边是这个月的,等号右边是上个月的 ;书写时注意顺序后面的赋 值直接覆盖前面的 例如 ①③交换位置则题就出错
yt = ct;//每月幼兔对数等于本月的成兔对数③
}
zt = ct + xt + yt;//总兔对数等于成兔加小兔加幼兔 //z的值不出现在右侧 所以不用担心下次运算时 替换问题
Console.WriteLine(i.ToString() + "个月后成兔对数是:" + ct.ToString());
Console.WriteLine(i.ToString() + "个月后小兔对数是:" + xt.ToString());
Console.WriteLine(i.ToString() + "个月后幼兔对数是:" + yt.ToString());
Console.WriteLine(i.ToString() + "个月后兔子总对数是:" + zt.ToString());
Console.ReadLine();
}
Console.ReadLine();
3.while循环
格式1:先判断,在做 (初始条件)+while(表达式(循环条件)){循环体+状态改变}
格式2:先做,在判断 (初始条件)+ do{循环体+状态改变}while(表达式(循环条件));
打印菱形
Console.Write("输入行数n:");
int n = int.Parse(Console.ReadLine());
int h1 = 1;//第1行赋值;
while(h1<=n)
{ int i=1;//第一列赋值
while(i<=n-h1)
{
Console.Write(" ");
i++;
}
int j=1;
while(j<=2*h1-1)
{
Console.Write("★");
j++;
}
Console.Write("\n");
h1++;
}
int h2 = 1;//下三角第一行赋值;
while (h2 < n)
{
int k = 1;//第一列赋值
while (k <= h2)
{
Console.Write(" ");
k++;
}
int l = 1;
while (l <= 2 * (n - h2) - 1)
{
Console.Write("☆");
l++;
}
Console.Write("\n");
h2++;
}
Console.ReadLine();
3.随笔(最重要的是前后知识联系起来,无外乎是嵌套 循环 分支)
循环语句 1.与分支语句 相互嵌套 2. 循环语句嵌套循环语句 3.分支语句套分支 // 做题方法
4.写程序时 注意多加注释 方便以后再看懂, 5.分析问题时,用草纸亲自打个草稿!
6. 分析问题时注意寻找规律,充其量就是变量和自变量关系,最多就是多套几个循环或者分支语句,每套一个,总的自变量就可以视为少一个!
- 复杂的问题,可以拆分成几个来找规律,最后能合并则合并,例如:打印菱形;
- 找出特例:其他的可以用规律写出来,例如上面兔子的问题,第一个月为特例,则先列出来;
- 思考问题,灵活,未必顺着题目来,也可能逆着来思考
例如(
五个小朋友排成一队,问第一个多大了,
第一个说比第二个大两岁,问第二个多大了,
第二个说比第三个大两岁。。。
以此类推,问第5个小朋友,说自己3岁了。
问第一个小朋友几岁了?
int s=3 ;
for (int i = 1; i <5;i++ ) //把最后一个小朋友看作是第一个小朋友 逆着做题;
{
s += 2;
}
Console.WriteLine(s);
也可能从中间向两端思考,还可能拆分成几个来思考(打印菱形)。
穹举,迭代,while循环。