首页 > 代码库 > 常数变易法

常数变易法

思路:

现将变动部分用常数代替,再逐步将常数替换为变数(变量)

关键是寻找变化的规律,如果不直观,可以列出所有变化,进行比对,然后设计公式

 

实例:

1.输出三角星号

技术分享

首先找规律,发现每一行都是先输出空格,然后输出*号,空格、信号与行号的关系如下:

行号     空格数     星号数

1            4         1

2            3         2

3            2          3

4            1          4

5            0          5

代码:

    public static void main(String[] args) {
        int rows = 5;
        for (int i = 1; i <= rows; ++i) {
            for (int j = 1; j <= rows - i; ++j) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; ++j) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }

 

2.输出字母金字塔

技术分享

经过观察,可以发现每一行的字符从左到右都是先增大再减小,最大的字符都是‘A’ + 行号-1(行号从1开始)

    public static void main(String[] args) {
    {
        int rows = 5;
        char ch = ‘A‘;
        for (int i = 1; i <= rows; ++i) {
            for (int j = 1; j <= rows - i; ++j) {
                System.out.print(‘ ‘);
            }
            for (int j = 0; j <= i - 1; ++j) {
                System.out.print((char) (ch + j));  // 将ASCII码转换为字符
            }
            for (int j = i - 2; j >= 0; --j) {
                System.out.print((char) (ch + j));
            }
            System.out.println();
        }
    }

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

 3.输出以下图形

技术分享

 

代码:

技术分享
public static void main(String[] args) {
    {
        int rows = 13;
        if (rows % 2 == 0)  //由于图形对称,处理偶数行,使其变为奇数行
            rows += 1;
        for (int i = 1; i<= rows/2; ++i)
        {
            for(int j = 0; j < i; ++j)
                System.out.print(‘ ‘);
            System.out.print("$$");
            for(int j = 0; j < rows /2 -i; ++j)
                System.out.print("  ");
            System.out.print("$$");
            System.out.println();
        }
        for(int i = 1; i <= rows/2+1; ++i)
            System.out.print(‘ ‘);
        System.out.println("$$");
        
        for (int i = 1; i<= rows/2; ++i)
        {
            for(int j = 0; j < rows/2+1 -i; ++j)
                System.out.print(‘ ‘);
            System.out.print("$$");
            for(int j = 0; j < i - 1; ++j)
                System.out.print("  ");
            System.out.print("$$");
            System.out.println();
        }
        
    }
View Code

 

常数变易法