算法举例:
水仙花
水仙花数:水仙花数是三位数,它的各位数字的立方和等于这个三位数本身,例如:370=33+73+00;371=33+73+13,370、371就是一个水仙花数
注意:要判断一个三位数是不是水仙花数,得先取得这个三位数的的个位,十位和百位
C语言
#include<stdio.h>
int main()
{
int b,s,g,n; //n是水仙花数
printf("水仙花数是:\n");
for(n=100;n<1000;n++)
{
b=n/100; /*分解出百位*/
s=n/10%10; /*分解出十位*/
g=n%10; /*分解出个位*/
if(b*100+s*10+g==b*b*b+s*s*s+g*g*g) //水仙花数判定
{
printf("%d\n",n); //输出符合条件的数
}
}
}
Java语言
public class Daffodil {
public static void main(String[] args) {
int count = 0; //定义水仙花数的个数
for(int i=100;i<=10000;i++){ //水仙花数范围
int b = i/100; //取得百位数
int s = (i-100*b)/10; //取得十位数
int g = (i-s*10-b*100); //取得个位数
if(i==g*g*g+s*s*s+b*b*b){ //水仙花数判定
System.out.print(i+" "); //输出符合条件的数
count++;
}
}
System.out.println(); //换行
System.out.println("水仙花数总共有"+count+"个"); //输出水仙花数的总数
}
}
注:主要有三种方式包括普通for循环、while循环以及do-while循环
猴子吃桃
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
问题分析:按照题意,猴子们每天吃桃子的一半,小猴子再偷吃一个,等于每天都吃前一天剩余桃子的一半加一个,知道第十天只剩一个桃子。
C语言
迭代法
注:for或while均可循环实现
#include<stdio.h>
#include <stdlib.h>
int main()
{
int peach = 0;//桃子总数
int rest = 1;//第10 天只剩一个桃子
int day = 9;
while(day--)
{
peach = (rest + 1) * 2;//每天的桃子总数是后一天剩余桃子加1乘2
rest = peach;
}
printf("猴子第一天一共摘了%d个桃子\n",peach);
system("pause");
return 0;
}
递归核心实现
int total_peach(int rest)
{
return (rest+1)*2;
}
while(day--)
{
peach = total_peach(rest);//递归实现
rest = peach;
}
Java语言
public class MonkeyEating {
public static void main(String[] args) {
int x = 1; //初始为1
for (int i = 2; i <= 10; i++) {
//第二天的数量为第一天数量的一半减一 y = x/2 - 1
//反过来说第一天是第二天的数量加一的两倍 2y = x -2 x = 2y +2 = 2*(y + 1)
x = (x + 1) * 2; //若干个桃子数计算公式
}
System.out.println("猴子第一天摘了" + x + "个桃子");
}
}
兔子记数
现有一对兔子,每一对兔子每个月都会生一对小兔子,小兔子在月龄达到第三个月开始每个月就可以生一对,兔子不会出现生老病死,经过一年,每个月兔子总数有多少对?
1、分析:兔子规律数:1,1,2,3,5,8,13,21……
2、斐波那契数列小代码
f1=f1+f2;
f2=f1+f2; //斐波那契数列规律
C语言
include<stdio.h>
int main()
{
long int f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12d %12d",f1,f2);
if(i%2==0)
printf("\n"); //四个一行打印(一次打印两个,两次循环打印四个)
f1=f1+f2;
f2=f1+f2; //斐波那契数列规律
}
return 0;
}
Java语言
每月的兔子总数就是:前一个月的兔子总数+这个月出生的兔子总数
public class rabbit {
public static void main(String ards[]){
int i,a=1,b=1,c=0,M=24;
//前两个月手动输出,第三个月开始进入规律
System.out.println("第1个月有1对兔子");
System.out.println("第2个月有1对兔子");
/*可理解为
a是任意一个月的兔子对数,b是a的下一个月的兔子对数,
令c=a+b,那么c就是b的下一个月的兔子对数
一个循环结束,a来到了上一轮b的位置,b来到了c的位置,
那么a+b又可以算出后面的对数了
*/
for(i = 3;i<M;i++){
c = a + b;
a = b;
b = c;
System.out.println("第"+i+"个月有"+c+"对兔子");
}
}
}
总结
(1) 实例分析
循环的嵌套是指在一个循环体内又包含了另一个完整的循环。循环的嵌套执行过程是外循环执行一次,内循环执行一次,在内循环结束后,再执行下一次外循环,如此反复,直到外循环结束。
(2) 循环的嵌套注意事项:
① 循环必须完全包含内循环,不能交叉;
② 在多重循环中,各层循环的循环控制变量不能同名;
③ 在多重循环中,并列循环的循环控制变量名可以相同,也可以不同。