打印 1...nX8+n=n...1


public class PrintTest
{
	public static void main(String[] args)
	{
		//題一打印如下
		//        1X8+1=9
		//       12X8+2=98
		//      123X8+3=987
		//     1234X8+4=9876
		//    12345X8+5=98765
		//   123456X8+6=987654
		//  1234567X8+7=9876543
		// 12345678X8+8=98765432
		//123456789X8+9=987654321
		
		//解題思路
		//
		//1.基數
		//這裏的基數就是等號前邊的數
		//看起來跟行數沒什麼區別
		//
		//2.起始空格
		//可以看出是8-0個,並可以根據9-行數
		//來計算,行數爲1-9,也就是正好8-0個
		//
		//3.乘數
		//乘數可以通過基數來求
		//那麼這個乘數可以看成是這樣的
		// 1*(10^base-1) + 2*(10^base-2) .... base*(10^base-base)
		//
		//4.表達式的和
		//第一種用求出來的乘數*8+基數
		//第二種
		//根據乘數和最後的表達式和的每一位相加
		//都可以得到10,那麼有如下表達式
		//10*(10^base-1) + 10*(10^base-2) .... 10*(10^base-base)
		//最後表達式的和可以通過這個表達式減去乘數表達式來求
		//最後的和
		//
		//也可以通過兩個表達式的最終相減來求算數表達式的和
		question1();
		
	}
	
	public static void question1()
	{
		//第一種解題方式採用字符方式打印
		for (int line = 1; line <= 9; line++)
        {
	        printQuestion1_1(line);
        }
		System.out.println("=======================>");
		
		//第二種解題方式採用字符串方式打印
		for (int line = 1; line <= 9; line++)
        {
	        printQuestion1_2(line);
        }
		System.out.println("=======================>");
		
		//第三種解題方式採用算法方式打印
		//1.通過基數計算出乘數
		//2.計算出表達式的和
		for (int line = 1; line <= 9; line++)
        {
	        printQuestion1_3(line);
        }
		System.out.println("=======================>");
		
		//第四種解題方式採用算法方式打印
		//從各位開始逐位計算乘數和表達式和的每一位
		//並將最後的結果相加
		for (int line = 1; line <= 9; line++)
        {
	        printQuestion1_4(line);
        }
		System.out.println("=======================>");
		
		//第五種解題方式採用算法方式打印
		//計算出乘數乘數和表達式每一位的和,也就是10
		//並最後用這個和減去乘數得到表達式的和
		for (int line = 1; line <= 9; line++)
        {
	        printQuestion1_5(line);
        }
		System.out.println("=======================>");
		
		//第六種解題方式跟第三種類似
		//計算乘數的方法不一樣
		for (int line = 1; line <= 9; line++)
        {
	        printQuestion1_6(line);
        }
		System.out.println("=======================>");
	}
	
	public static void printQuestion1_1(int base)
	{
		//計算本行有多少空格並打印
		for (int space = 9 - base; space > 0; space--)
        {
	        System.out.print(" ");
        }
		
		//計算本行的乘數,並打印
		for (int multiplier = 1; multiplier <= base; multiplier++)
        {
	        System.out.print(multiplier);
        }
		System.out.print("X8+"+base+"=");
		
		//計算表達式最後的和
		for (int sum = 9; sum > 9 - base; sum--)
        {
			System.out.print(sum);
        }
		System.out.println();
	}
	
	public static void printQuestion1_2(int base)
	{
		//根據基數打印本行的空格
		String space = "         ";
		System.out.print(space.substring(base));
		
		//根據基數打印本行的乘數
		StringBuilder sb = new StringBuilder("123456789");
		System.out.print(sb.toString().substring(0,base));
		
		//打印倍數和技術的表達式
	    System.out.print("X8+" + base+"=");
	    
	    //打印最後的和
	    System.out.print(sb.reverse().substring(0,base));
	    System.out.println();
	}
	
	public static void printQuestion1_3(int base)
	{
		//計算本行有多少空格並打印
		for (int space = 9 - base; space > 0; space--)
        {
	        System.out.print(" ");
        }
		
		//計算本行的乘數並打印
		int multiplier = 0;
		for (int j = 0; j < base; j++)
        {
			multiplier += j + 1;
			multiplier = j < base - 1 ? multiplier * 10 : multiplier;
        }
		System.out.print(multiplier);
		
		//打印倍數和基數表達式
		int multiple = 8;
		System.out.print("X" + multiple + "+" + base + "=");
		
		//計算表達式最後的和並打印
		int sum = multiplier * 8 + base;
		System.out.print(sum);
		System.out.println();
	}
	
	public static void printQuestion1_4(int base)
	{
		//計算本行有多少空格並打印
		for (int space = 9 - base; space > 0; space--)
        {
	        System.out.print(" ");
        }		
		
		int multiplier = 0;
		int sum = 0;
		for (int i = base, factor = 1; i > 0; i--, factor *=10)
        {
			multiplier+=(i*factor);
			sum+=((10-i)*factor);
	        
        }
		System.out.println(multiplier+"X8+"+base+"="+sum);
	}
	
	public static void printQuestion1_5(int base)
	{
		//計算本行有多少空格並打印
		for (int space = 9 - base; space > 0; space--)
        {
	        System.out.print(" ");
        }		
		
		int multiplier = 0;
		int sum = 10;
		for (int i = base, factor = 1; i > 0; i--, factor*=10)
        {
			multiplier+=(i*factor);
			if (i != base)
            {
				sum = sum*10+10;
            }
		}
		System.out.println(multiplier+"X8+"+base+"="+(sum - multiplier));
	}
	
	public static void printQuestion1_6(int base)
	{
		//計算本行有多少空格並打印
		for (int space = 9 - base; space > 0; space--)
        {
	        System.out.print(" ");
        }		
		//乘數的求法,也可以這樣
		//0*10+1 
		//0*10+1 + (0*10+1)*10+1
		//0*10+1 + (0*10+1)*10+1 + ((0*10+1)*10+1)*10+1
		//0*10+1 + (0*10+1)*10+1 + ((0*10+1)*10+1)*10+1 + (((0*10+1)*10+1)*10+1)*10+1
		
		//換換簡單點的寫法
		//1
		//1+11
		//1+11+111
		//1+11+111+1111
		
		//用命題的第九行減去第八行,第八行減去第七行
		//如此類推就能得到上邊的數列
		//在根據要顯示的行數把數列中的所有數相加就能
		//得到最後算數表達式的值
		int multiplier=0;
		for(int i = 0, factor = 0; i < base; i++)
		{
			factor = factor * 10 + 1;
			multiplier += factor;	
		}		
		System.out.println(multiplier+"X8+"+base+"="+(multiplier*8+base));
	}
}

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