Java-循环经典案例!

例子:

/*
需求:小芳的妈妈每天给她2.5元钱,她都会存起来,但是,
每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
请问,经过多少天,小芳才可以存到100元钱。

分析:
    A:小芳的妈妈每天给她2.5元钱
        double dayMoney = 2.5;
    B:她都会存起来
        double daySum = 0;
    C:从第一天开始存储
        int dayCount = 1;
    D:经过多少天,小芳才可以存到100元钱。
        double result = 100;
    E:这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
        说明要判断dayCount的值,如果对5整除就减去6元钱。
            daySum -= 6;
      由此还隐含了一个问题,就是如果不是5的倍数天的话,钱要累加
            daySum += dayMoney;
    F:因为不知道是多少天,所以我用死循环,一旦超过100元我就退出循环。

*/
class WhileDemo {
public static void main(String[] args) {
//每天要存储的钱是2.5元
double dayMoney = 2.5;

    //存钱的初始化值是0
    double daySum = 0;

    //从第一天开始存储
    int dayCount = 1;

    //最终存储不小于100就不存储了
    int result = 100;

    //因为不知道是多少天,所以我用死循环,
    while(true) {
        //累加钱
        daySum += dayMoney;

        //一旦超过100元我就退出循环。
        if(daySum >= result) {
            System.out.println("共花了"+dayCount+"天存储了100元");
            break;
        }

        if(dayCount%5 == 0) {
            //花去6元钱
            daySum -= 6;
            System.out.println("第"+dayCount+"天花了6元钱");
        }

        //天数变化
        dayCount++;
    }
}

}

/*
我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

分析:
    A:定义一个统计变量,默认值是0
    B:最高山峰是珠穆朗玛峰:8848m这是最终的厚度
      我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
    C:我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
      折叠一次有什么变化呢?就是厚度是以前的2倍。
    D:只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
    E:输出统计变量。

*/

class WhileDemo5 {
public static void main(String[] args) {
//定义一个统计变量,默认值是0
int count = 0;

    //最高山峰是珠穆朗玛峰:8848m这是最终的厚度
    //我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
    //为了简单,我把0.01变成1,同理8848就变成了884800
    int end = 884800;
    int start = 1;

    while(start<end) {
        //只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
        count++;

        //折叠一次有什么变化呢?就是厚度是以前的2倍。
        start *= 2;

        System.out.println("第"+count+"次厚度是"+start);
    }

    //输出统计变量。
    System.out.println("要叠"+count+"次");
}

}

/*
需求:求5的阶乘。

什么是阶乘呢?
    n! = n*(n-1)! 规则
    n! = n*(n-1)*(n-2)*...*3*2*1

求和思想。
求阶乘思想。

*/
class ForDemo5 {
public static void main(String[] args) {
//定义最终结果变量
int jc = 1;

    //这里的x其实可以直接从2开始
    //for(int x=1; x<=5; x++)

    for(int x=2; x<=5; x++) {
        jc *=x;
    }

    System.out.println("1-5的阶乘是:"+jc);
}

}

扫描二维码关注公众号,回复: 6022566 查看本文章

/*
练习:
请在控制台输出满足如下条件的五位数
个位等于万位
十位等于千位
个位+十位+千位+万位=百位

分析:
    A:五位数就告诉了我们范围。
    B:分解每一个五位数的个,十,百,千,万位上的数据
    C:按照要求进行判断即可

*/
class ForDemo7 {
public static void main(String[] args) {
//五位数就告诉了我们范围。
for(int x=10000; x<100000; x++) {
//分解每一个五位数的个,十,百,千,万位上的数据
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
int qian = x/10/10/10%10;
int wan = x/10/10/10/10%10;

        //按照要求进行判断即可
        if((ge==wan) && (shi==qian) && (ge+shi+qian+wan==bai)) {
            System.out.println(x);
        }
    }
}

}

 /**
  * 兔子数 1,1,2,3,5,8,13,21....
  * */
 public static void tuZiShu() {
       // 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数為多少?
       // 解决思路:兔子的规律为数列1,1,2,3,5,8,13,21....
       int[] anArray2 = new int[10];
       anArray2[0] = 1;
       anArray2[1] = 1;
       for (int i = 0; i < anArray2.length; i++) {
            if (i < 2) {
                 System.out.println(anArray2[i]);
            } else {
                 anArray2[i] = anArray2[i - 1] + anArray2[i - 2];
                 System.out.println(anArray2[i]);

            }

       }
 }

 /** 判断101-200之间有多少个素数 */
 public static void suShu() {
       // 判断101-200之间有多少个素数,并输出所有素数。
       // 解决思路:判断素数的方法:用一个数分别去除2sqrt这个数如果能被整除,则表明此数不是素数,反之是素数。
       for (int i = 101; i <= 200; i++) {
            if (i % 2 == 0) {
                 continue;
            } else {
                 System.out.println(i);
            }
       }
 }

 /** 水仙花数 */
 public static void shuiXianHuaShu() {
       // 打印出所有的"水仙花数"所谓"水仙花数"指一个三位数,其各位数字立方和等于该数本身。例如:
       // 153一个"水仙花数"因為153=1三次方+5三次方+3三次方。
       // 解决思路:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
       for (int i = 100; i <= 999; i++) {
            int geWei, shiWei, baiWei;
            baiWei = i / 100;
            shiWei = (i - baiWei * 100) / 10;
            geWei = i - baiWei * 100 - shiWei * 10;
            if (i == geWei * geWei * geWei + shiWei * shiWei * shiWei + baiWei * baiWei * baiWei) {
                 System.out.println(i);
            }
       }
 }

 /** 三目运算符 */
 public static void sanMuYunSuan() {
       // 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A 表示,60-89分之间的用B表示,60分以下的用C表示。
       // 解决思路:a>b?a:b这是条件运算符的基本例子。
       int chengji = 99;
       if (chengji >= 90) {
            System.out.println("A");
       } else if (chengji >= 60 && chengji <= 89) {
            System.out.println("B");
       } else if (chengji <= 60 && chengji >= 0) {
            System.out.println("C");
       }
 }

 /** 9*9乘法表 */
 public static void chengFaBiao() {
       // 9*9乘法表
       for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                 System.out.print(i + "*" + j + "=" + i * j + "\t");
            }
            System.out.println("\n");
       }
 }

 /** 空心菱形 */
 // 空心菱形
 public static void lingXing() {
       for (int i = 1; i <= 10; i++) {// 控制行数
            for (int j = 1; j <= 10 - i; j++) {// 控制空格
                 System.out.print(" ");
            }
            for (int z = 1; z <= 2 * i - 1; z++) {// 控制*
                 if (z == 1 || z == 2 * i - 1) {// 打印第一个*和最后一个*,其余的输出空格
                       System.out.print("*");
                 } else {
                       System.out.print(" ");
                 }
            }
            System.out.println();
       }

       for (int i = 10; i > 0; i--) {
            for (int j = 1; j <= 10 - i; j++) {
                 System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {
                 if (k == 1 || k == 2 * i - 1) {
                       System.out.print("*");
                 } else {
                       System.out.print(" ");
                 }
            }
            System.out.println();
       }
 }

 /** 求质数 */
 public static void qiuZhiShu() {
       for (int i = 100; i <= 200; i++) {
            boolean jieguo = true;
            for (int j = 2; j < i; j++) {// 找到不是质数的数(除了1与它本身还能被其他数整除的数)
                 if (i % j == 0) {
                       jieguo = false;
                       break;
                 }
            }
            if (jieguo) {
                 System.out.print(i + " ");
            }
       }
       System.out.println();
 }

 /** 矩形+面积 */
 public static int test4() {
       int m = 0;
       for (int i = 1; i <= 20; i++) {
            for (int j = 1; j <= 5; j++) {
                 System.out.print("*");
                 m++;// 面积:输出一个*m就++
            }
            System.out.println();
       }
       // int s=20*5;
       return m;
 }

 /** 传参求矩形的面积 */
 public static int juXing(int hang, int kuan) {
       for (int i = 1; i <= hang; i++) {
            for (int j = 1; j <= kuan; j++) {
                 System.out.print("*");
            }
            System.out.println();
       }
       return hang * kuan;

 }

 /** 重载练习:定义边长的参数,返回矩形的面积 */
 public static int test6(int hang) {
       for (int i = 1; i <= hang; i++) {
            for (int j = 1; j <= 6; j++) {
                 System.out.print("*");
            }
            System.out.println();
       }
       return hang * 6;
 }

 /** 分解质因数 */
 public static void fenJieZhiYinShu() {
       // 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
       // 解决思路:对n进行分解质因数,应先找到一个最小的质数k然后按下述步骤完成:
       // 1如果这个质数恰等于n则说明分解质因数的过程已经结束,打印出即可。
       // 2如果n<>k但n能被k整除,则应打印出k值,并用n除以k商,作為新的正整数你n,重復执行第一步。
       // 3如果n不能被k整除,则用k+1作為k值,重復执行第一步。
       Scanner input = new Scanner(System.in);
       System.out.println("请输入一个正整数:");
       int num = input.nextInt();
       if (num < 2) {// 若输入的数小于2,输出提示信息
            System.out.println("必须输入不小于2的正整数!");
       } else {
            int k = 2;// 定义最小的质数
            while (k <= num) {// 在质数小于输入的数时,进行循环
                 if (k == num) {// 当质数等于输入的数时,直接输出
                       System.out.print(num);
                       break;// 跳出循环
                 } else if (num % k == 0) {// 当输入的数与质数的余数为0时,输出这个质数
                       System.out.print(k + " ");
                       num = num / k;// 把剩下的结果赋给num

                 } else {// 在余数不为0时,质数递增
                       k++;
                 }
            }
       }
 }

 /** 最大公约数,最小公倍数 */
 public static void gysAndgbs() {
       Scanner input = new Scanner(System.in);
       System.out.println("请输入第一个数:");
       int num1 = input.nextInt();
       System.out.println("请输入第二个数:");
       int num2 = input.nextInt();
       int gong = 1;
       System.out.print("所有公约数");
       for (int i = 1; i <= num1 && i <= num2; i++) {
            if (num1 % i == 0 && num2 % i == 0) {
                 System.out.print(i + "   ");
                 gong = i;
            }
       }
       System.out.println("\n最大公约数" + gong);

       for (int i = num1 > num2 ? num1 : num2; i <= num1 * num2; i++) {
            if (i % num1 == 0 && i % num2 == 0) {
                 System.out.print(i);
                 break;
            }
       }
 }

 /** 判断字符串包含数字个数 */
 public static void shuZiNum() {
       // 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
       // 解决思路:利用while语句,条件為输入的字符不為1\n1.
       // 判断纯数字,Character.isDigit();
       String str = "aaa11";
       char a[] = str.toCharArray();
       int count = 0;
       for (int i = 0; i < a.length; i++) {
            // System.out.println(a[i]);
            if (Character.isDigit(a[i])) {
                 System.out.println(a[i]);
                 count++;
            }
       }
       System.out.println("包含" + count + "个数字");
 }

 /**
  * 数字累加
  * */
 public static void leiJia() {
       // 题目:求s=a+aa+aaa+aaaa+aa...a值,其中a一个数字。例如2+22+222+2222+22222此时共有5个数相加几个数相加有键盘控制。
       // 解决思路:关键是计算出每一项的值。
       Scanner input = new Scanner(System.in);
       int s = input.nextInt();
       int sum = s;
       String shu = String.valueOf(s);
       for (int i = 1; i < 5; i++) {
            shu = shu + String.valueOf(s);
            System.out.println(shu);
            sum = sum + Integer.parseInt(shu);
       }
       System.out.println(sum);

 }

 /**
  * 求奇数和
  * */
 public static void jiShuhe() {
       int he = 0;
       System.out.println("100以内的奇数为:");
       for (int i = 1; i <= 100; i++) {
            if (i % 2 != 0) {
                 System.out.println(+i);
                 he = he + i;
            }
       }
       System.out.println("奇数和:" + he);
 }

 /** 偶数和 */
 public static void ouShuhe() {
       int he = 0;
       System.out.println("100以内的偶数为:");
       for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                 System.out.println(+i);
                 he = he + i;
            }
       }
       System.out.println("偶数和:" + he);
 }

 /** 每只母鸡3元,每只公鸡4元,每只小鸡0.5元,如果花费100元买100只鸡,有多少种方法 */
 public static void maiJi() {
       int zhishu = 100;
       int money = 100;
       int muji = 0;
       int gongji = 0;
       int xiaoji = 0;
       for (muji = 0; muji <= zhishu; muji++) {
            for (gongji = 0; gongji <= zhishu; gongji++) {
                 for (xiaoji = 0; xiaoji <= zhishu; xiaoji++) {
                       if ((muji + gongji + xiaoji == zhishu) && (3 * muji + 4 * gongji + 0.5 * xiaoji == money)) {
                            System.out.println("母鸡:" + muji + "公鸡数:" + gongji + "小鸡数量:" + xiaoji);
                       }
                 }
            }
       }

 }

}

猜你喜欢

转载自blog.csdn.net/Smile_Sunny521/article/details/89518354
今日推荐