算法题型的个人练习_01

来源:互联网 发布:ba无标度网络模型 编辑:程序博客网 时间:2024/06/05 19:42

题目  算法实现,输入一个正整数n,打印2*n行,如当输入n=4时,输出

1

2*3

4*5*6

7*8*9*10

7*8*9*10

4*5*6

2*3

1

个人认为这道题的难点在于下半部分的数字记录。在实现方面有很多种方法,其中一种方法是在一个for循环里面分两个小循环,一个打印上半部分,一个打印下半部分,作为判断条件就是当循环到第n次时,n次以前的就执行上半部分的循环,n次以后就执行下半部分的循环。

<span style="white-space:pre"></span>for(int j = 0; j < 2*i+1; j++){if(j != 0 && j % 2 != 0){System.out.print("*");}else {System.out.print(k);k++;}}System.out.println("");
上半部分的实现,其中判断是否输出*时,当j为奇数时输出,k是作为输出数,每输出一个便加1.


<span style="white-space:pre"></span>k = k - 1;b = k - (n - a) ;k = b;for(int j = 0; j < ((2*n-1)-(i-n)*2); j++){if(j != 0 && j % 2 != 0){System.out.print("*");}else {System.out.print(b);b++;}}a++; System.out.println("");

下半部分的实现。下半部分要考虑的是输出的位数要和上半部分相对应,且数字也要对应。其中对输出位数的计算为(2*n-1)-(i-n)*2,(2*n-1)是上半部分最后一行输出的位数,然后减去一个等差得出需要输出的位数。对于输出数的计算,我先定义一个新的变量a,它随着小循环结束加1。k=k-1是因为上半部分结束时k任然加1,所以要先减去1得到上半部分输出的最后一个数字。b = k - (n - a) 这句主要作用是得到每一行开头的数字,方便输出,最后k=b的作用是记录上一行的第一个数字。

 

public class Algorithm {public void test(int n){int k = 1;//上半部分输出大小及下半部分的记录int a = 1;//下半部分涉及到的算法int b = 0;//下半部分输出数字大小for(int i = 0; i < 2*n; i++){if (i < n){for(int j = 0; j < 2*i+1; j++){if(j != 0 && j % 2 != 0){System.out.print("*");}else {System.out.print(k);k++;}}System.out.println("");}else {k = k - 1;b = k - (n - a) ;k = b;for(int j = 0; j < ((2*n-1)-(i-n)*2); j++){if(j != 0 && j % 2 != 0){System.out.print("*");}else {System.out.print(b);b++;}}a++; System.out.println("");}}}public static void main(String[] args){Algorithm a = new Algorithm();Scanner s = new Scanner(System.in);int n = s.nextInt();a.test(n);}}

完全代码


512*34*5*67*8*9*1011*12*13*14*1511*12*13*14*157*8*9*104*5*62*31

当输入5时得到的输出。

0 0
原创粉丝点击