首页 > 其他 > 详细

编程算法基础-常数变易法

时间:2014-04-21 23:00:05      阅读:661      评论:0      收藏:0      [点我收藏+]

1.4常数变易法

常数变异的思考方法

当程序中有许多因素都在变动的时候,我们可以假设其中的某些变数为常数,把他们写成固定的死值。

将来再用变量替换。

星号金字塔

常数变异典型应用

 

打印这个金字塔:

              *

              * *

             * * *

            * * * *

           * * * * *

正常的思路:两层嵌套循环。

/*
           *
          * *
         * * *
        * * * *
       * * * * *
*/
package ConstantChange;
 
public class PrintPyramid {
    public static void main(String[] args) {
       /*System.out.println("          *");
       System.out.println("        * *");
       System.out.println("       * * *");
//     System.out.println("     * * * *");
//     System.out.println("     * * * * *");
      
       for(int i=0;i<17;i++){
           System.out.print(" ");
       }
       for(int i=0;i<4;i++){
           System.out.print("* ");
       }
       System.out.println();
      
       for(int i=0;i<16;i++){
           System.out.print(" ");
       }
       for(int i=0;i<5;i++){
           System.out.print("* ");
       }
       System.out.println();*/
      
       //尝试写双层循环,代替上述的这种写5次的三行循环。
       //k  0  1  2  3  4   【k】
       //? 20 19 18 17 16 【20-k】
       //?? 1  2  3  4  5   【k+1】
       for(int k=0;k<5;k++){
           for(int i=0;i<20-k;i++){
              System.out.print(" ");
           }
           for(int i=0;i<k+1;i++){
              System.out.print("* ");
           }
           System.out.println();
       }
    }
}
                    *
                   * *
                  * * *
                 * * * *
                * * * * *



字母金字塔

 

        A

       ABA

      ABCBA

     ABCDCBA

    ABCDEDCBA

/*
        A
       ABA
      ABCBA
     ABCDCBA
    ABCDEDCBA
   
*/
package ConstantChange;
 
public class LetterPyramid {
    public static void main(String[] args) {
/*//       "     ABCDCBA"
       for(int i=0;i<5;i++){
           System.out.print(" ");
       }
       for(int i=0;i<4;i++){
//         System.out.print(‘A‘);//常数变异法,这里本应是变动的,先用常数代替
           System.out.print((char)(‘A‘+i));//输出ABCDE,强制转换ASCII码
       }
       for(int i=3-1;i>=0;i--){
           System.out.print((char)(‘A‘+i));
       }
       System.out.println();
//     "    ABCDEDCBA"
       for(int i=0;i<4;i++){
           System.out.print(" ");
       }
       for(int i=0;i<5;i++){
//         System.out.print(‘A‘);//常数变异法,这里本应是变动的,先用常数代替
           System.out.print((char)(‘A‘+i));//输出ABCDE,强制转换ASCII码
       }
       for(int i=4-1;i>=0;i--){
           System.out.print((char)(‘A‘+i));
       }
       System.out.println();*/
      
       //k   
       //?    9-k
       //??   k
       //???  k-2
        for(int k=1;k<5;k++){
           for(int i=0;i<9-k;i++){
              System.out.print(" ");
           }
           for(int i=0;i<k;i++){
              System.out.print((char)(‘A‘+i));//输出ABCDE,强制转换ASCII码
           }
           for(int i=k-2;i>=0;i--){
              System.out.print((char)(‘A‘+i));
           }
           System.out.println();
       }
      
    }
}
        A
       ABA
      ABCBA
     ABCDCBA


当变成逐渐熟练之后,常数变异法可能是我们最常用的方法。

打印图形X

 

试打印出如下图形:

 

 $$         $$

 $$        $$

  $$      $$

   $$    $$   

     $$ $$    

      $$$$   

       $$      

      $$$$   

     $$ $$     

   $$    $$  

  $$      $$ 

 $$        $$

 $$         $$

 

 

注意规模可以调整

/*
 * 打印图形
 
试打印出如下图形:
 
 $$          $$
  $$        $$
   $$      $$
    $$    $$   
     $$  $$    
      $$$$   
       $$      
      $$$$   
     $$  $$    
    $$    $$  
   $$      $$ 
  $$        $$
 $$          $$
 
 
注意规模可以调整
*/
package ConstantChange;
 
public class PrintX {
    public static void main(String[] args) {
       /*//" $$          $$ "
       for(int i=0;i<1;i++) System.out.print(" ");
       for(int i=0;i<2;i++) System.out.print("$");
       for(int i=0;i<10;i++) System.out.print(" ");
       for(int i=0;i<2;i++) System.out.print("$");
       for(int i=0;i<1;i++) System.out.print(" ");
       System.out.println();
       //"  $$        $$  "
       for(int i=0;i<2;i++) System.out.print(" ");
       for(int i=0;i<2;i++) System.out.print("$");
       for(int i=0;i<8;i++) System.out.print(" ");
       for(int i=0;i<2;i++) System.out.print("$");
       for(int i=0;i<2;i++) System.out.print(" ");
       System.out.println();*/
      
      
       int LINE = 13;//由于图形的对称性,输入偶数行时,做出的图形+1行
       int n = LINE/2;
      
       for(int k=0;k<n;k++){
           for(int i=0;i<k+1;i++) System.out.print(" ");
           System.out.print("$$");
           for(int i=0;i<LINE-3-2*k;i++) System.out.print(" ");
           System.out.print("$$");
           for(int i=0;i<k+1;i++) System.out.print(" ");
           System.out.println();
       }
      
       for(int i=0;i<n+1;i++) System.out.print(" ");
       System.out.print("$$");
       for(int i=0;i<n+1;i++) System.out.print(" ");
       System.out.println();
      
       for(int k=n-1;k>=0;k--){
           for(int i=0;i<k+1;i++) System.out.print(" ");
           System.out.print("$$");
           for(int i=0;i<LINE-3-2*k;i++) System.out.print(" ");
           System.out.print("$$");
           for(int i=0;i<k+1;i++) System.out.print(" ");
           System.out.println();
       }
    }
}
 $$          $$
  $$        $$ 
   $$      $$  
    $$    $$    
     $$  $$    
      $$$$     
       $$      
      $$$$     
     $$  $$    
    $$    $$   
   $$      $$  
  $$        $$ 
 $$          $$


编程算法基础-常数变易法,布布扣,bubuko.com

编程算法基础-常数变易法

原文:http://blog.csdn.net/u011925500/article/details/24257965

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!