算法题型的个人练习_01

题目  算法实现,输入一个正整数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);
	}
}

完全代码


5
1
2*3
4*5*6
7*8*9*10
11*12*13*14*15
11*12*13*14*15
7*8*9*10
4*5*6
2*3
1

当输入5时得到的输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值