常数变易法

Posted wanlifeipeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常数变易法相关的知识,希望对你有一定的参考价值。

思路:

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

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

 

实例:

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

 

以上是关于常数变易法的主要内容,如果未能解决你的问题,请参考以下文章

MT316常数变易法

MT129常数变易法

编程算法之常数变异法

stl变易算法

stl变易算法

STL非变易算法