for循環題解

/* 打印圖形
  ********
  ********
  ********
  ********
*/
class Demo01{
    public static void main(String[] args) {
   //第一種寫法
         for(int i=1;i<=4;i++){ //外層循環控制打印的行數爲4行
            System.out.println("********"); //每行打印的內容換行
        }

        System.out.println("============");

    //第二種寫法

        for(int i=1;i<=4;i++){  //外層循環控制打印的行數爲4行
            for(int j=1;j<=8;j++){ //內層循環控制每行的列數爲8列
                System.out.print("*");  //每列的內容不換行
            }
            System.out.println(); //內層循環每結束一次也就是打印一行就換行
   }
}
/*打印下列圖形 
    *                       *         ******        ******
    **                     **         *****          *****
    ***                   ***         ****            ****
    ****                 ****         ***              ***
    *****               *****         **                **
    ******             ******         *                  *     
 */
class Demo02{
    public static void main(String[] args) {
   //第一個圖形
         for(int i=1;i<=6;i++){  //i 表示行數控制打印多少行
            for(int j=1;j<=i;j++){  //內循環控制列數,且每行的列數隨行數的增加而增加
                System.out.print("*");
            }
            System.out.println(); //每打印一行執行換行語句
        }

        System.out.println("============");

    //第二個圖形
        for(int i=1;i<=6;i++){
         //先打印空格
            for(int k=1;k<=6-i;k++){  //第一個內循環控制每行的空格數,隨行號增加1而減少1
                System.out.print(" ");
            }
            for(int j=1;j<=i;j++){   //第二個內循環控制打印的*列數,隨行號增加1而增加1 
                System.out.print("*");  
            }
            System.out.println();
        }

        System.out.println("============");

    //第三個圖形  與第一個圖形相似
         for(int i=6;i>=1;i--){
            for(int j=1;j<=i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("=============");

    //第四個圖形   與第二圖形相似
       for(int i=1;i<=6;i++){
            for(int k=1;k<=i-1;k++){
                System.out.print(" ");
            }
            for(int j=1;j<=7-i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
/* 打印圖形      i  j                      k  i  j
       *        1  1               *      5  1  1
       **       2  2              **      4  2  2
       ***      3  3             ***      3  3  3
       ****     4  4            ****      2  4  4
       *****    5  5           *****      1  5  5
       ******   6  6          ******      0  6  6
       *****    7  5           *****      1  7  5
       ****     8  4            ****      2  8  4
       ***      9  3             ***      3  9  3
       **       10 2              **      4  10 2  
       *        11 1               *      5  11 1
 */

class Demo03{
    public static void main(String[] args) {
   //第一個圖形
         for(int i=1;i<=11;i++){
            for(int j=1;j<=i&&(i+j)<=12;j++){ //該圖形的列數是隨着行號的增加呈現先增在減的趨勢的,且爲對稱圖形,所以可以取最中間一行作爲分水嶺,且當行號大於第六行時,每行的行號加上該行的列數都爲一個固定值,所以判斷條件有兩個必須同時滿足
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("============");

    //第二個圖形
         for(int i=1;i<=9;i++){
          //先打印空格
            for(int k=1;k<=Math.abs(i-5);k++){//該圖形的空格列數是隨着行號的增加呈現先減再增的趨勢的,且爲對稱圖形,所以可以取最中間一行作爲分水嶺,因爲中間空格數爲0.此時考慮絕對值,空格數的區間在[-5.5]之間,所以可以用i-5取絕對值得方法來得到數字的變化,其中Math.abs()是對一個數求絕對值
                System.out.print(" ");
            }
            for(int j=1;j<=i&&(i+j)<=10;j++){  //與圖一原理相同
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
   
/* 打印圖形
            *                     *                 1    
           * *                   * *               1  2
          * * *                 *   *             1    3
         * * * *               *     *           1      4
        * * * * *             *       *         1        5
         * * * *               *     *           1      4
          * * *                 *   *             1    3
           * *                   * *               1  2
            *                     *                 1
  */
class Demo04{
    public static void main(String[] args) {
   //第一個圖形
          for(int i=1;i<=9;i++){
            for(int k=1;k<=Math.abs(i-5);k++){ 
                System.out.print(" ");
            }
            for(int j=1;j<=i&&(i+j)<=10;j++){ //此圖形是Demon03程序中第二個圖形的變體
                System.out.print("* "); //在此處每打印一個*後面多加一個空格就可形成菱形
            }
            System.out.println();
        }
        System.out.println("============");

    //第二個圖形
         for(int i=1;i<=9;i++){
            for(int k=1;k<=Math.abs(i-5);k++){
                System.out.print(" ");
            }
            for(int j=1;j<=i&&(i+j)<=10;j++){
                if(j==1||j==i||j+i==10){
                    System.out.print("* "); //此圖形與圖一相似,圖中已經給出具體的特殊位置,只要將特殊的位置打印其他爲空就可以了
                }else{
                    System.out.print("  ");
                }
            }
            System.out.println();
        }
    }
}
/*
   求兩個數的最大公約數
*/
import java.util.Scanner;
class Demon05{
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        System.out.print("請輸入兩個數字:"); //提示用戶輸入兩個數字
        int a=scanner.nextInt();
        int b=scanner.nextInt();  //接受用戶輸入的兩個整數
        int gcd=1;
      //首先判斷兩個數中誰最小,用最小的數做循環的繼續條件,這裏用到一個三元運算符,直接將最小的數作爲返回結果給了判斷條件
        for(int i=2;i<=(b<a?b:a);i++){  
            if(a%i==0 && b%i==0){  // 從1開始找都能被兩個整數整除的因子,如果餘數爲0,表示此i的值爲兩個數的因子
                gcd=i; //此時的i值並不是最大的,要繼續查找直到循環結束
            }
        }
        System.out.println(gcd);  //最後顯示最大的公約數
    }
}

import java.util.Scanner;
class Demon06{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("請輸入要打印的層數:"); //提示用戶輸入打印的層數
        int x = in.nextInt(); //接受用戶輸入的數字
        for(int i=1;i<=x;i++){  //將數字傳進來控制打印的行數
            for(int k=1;k<=x-i;k++){ //空格隨行值增加而減少
                System.out.print("  ");
            }
            for(int j=-(i-1);j<=i-1;j++){ //每行數字先減再加
                System.out.print(Math.abs(j)+1+" ");  //因爲從j負數開始,所以要對j取絕對值
            }
            System.out.println();
        }
    }
    
}

class Demon07{
    public static void main(String[] args) {
        for(int i=1;i<=10000;i++){
            int sum=0; //每個數都有一個和
            for(int j=1;j<=i/2;j++){ //找出一個被除數一半以下的數的除數就可以判斷該被除數有哪些除數
                if(i%j==0){  //如果該j的取值能被i整除,即爲i的除數
                    sum+=j;   //將其所有的除數相加
                }
            }
            if(sum==i){   //如果該數的所有除數相加的和等於它本身,則爲完全數
                System.out.println(i);
            }
        }
    }
}

class Demon08{
    public static void main(String[] args){
        /*
                  0
                0 1 0
              0 1 2 1 0
            0 1 2 3 2 1 0
         */
        for(int i=1;i<=8;i++){   //總共爲8行
            for(int k=1;k<=8-i;k++){  //每行空格數減一
                System.out.print("    ");  //因爲隨着數組位數增加所佔寬度越大,所以給每位數之間分配4個空格
            }
            for(int j=-(i-1);j<=i-1;j++){ //用區間表示每行的列數
                System.out.printf("%-4.0f",Math.pow(2,i-1-Math.abs(j))); // 每行的數組都是2的多少次冪,且如上分析是先加再增,所以對冪取區間差的絕對值
            }
            System.out.println();
        }
    }
}

 

發佈了34 篇原創文章 · 獲贊 24 · 訪問量 1936
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章