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));
}
}
打印 1...nX8+n=n...1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.