蓝桥杯真题训练——第六届A组第四题:打印菱形

第四题 程序填空题

在这里插入图片描述

一、解题过程

首先,先看了代码,理解了是分为上下两部分进行打印,然后先打印出对称轴,再在对称州的基础上进行修改,接着就开始找规律,一开始以为字符串可以做减法,但是后面将代码打入Elipse时,发现不能做减法,必须要用加法,这是才想到要在原字符串上进行截取操作,然后就分析了字符串,发现每次循环新的s字符串是按照一定规律截取原字符串来获得的,然后就找到了规律是n-i的长度;接着就去找API发现String类有截取字符串的方法substring(start,end),就尝试按照第一次找到的规律在elipse进行编译,后面发现当输出边长为4是的正确的,而且输出变成为8时是错误的,因此又继续分析变成不同时输出的规律,最后找到应该截取的是(0,2*n-4-i)的长度,最后再试多几个边长不同的棱形都成功了,可是,再查答案后,发现答案

s.substring(0, s.length() - 3)

二、心得

①以后看到这种类型的题,先自己手动草稿纸演算一边代码过程,明白其思想与算法。

②明白算法与思想之后,去分析应该要填什么,有思路之后,就把代码打到Elipse,然后把自己第一次的想法输入,看能否实现,若不能实现则继续找规律分析

③代码填空时,要多用到该代码用到数据类型的API方法,比如用到了了Vector,那么就想想是否与Size有关,用到了字符串,那么就相信是否与length有关,就是说最后的答案要尽可能用到自带的API方法。
就好像这次题目,当初自己找规律时,发现的是n与i直接的关系,但是答案给的是Length的关系,如果当初有这个意识,那么肯定就会重点从字符串的长度进行关系的查找,因为这很容易可以看出,新得字符串是原字符串长度-3。所以要用多用原API操作方法的意识,集合大小和字符串长度的意识。虽然当初自己找的规律也可以正确输出,但是要和标准答案一致,谁知道到时会不会设置多个答案呢

三、解题思路

首先,明确何为题目中菱形的边长,由图可知,边长n是指菱形共有2n-1行,上面n-1行和下面n-1行关于中间的一行对称。上面n行中的第i行(i从0开始),开头有n-1-i个空格,中间有2i-1个空格。上半部分开头空格逐行递减1个,中间空格逐行递增2个,下半部分与上半部分对称。以上为这个菱形的特点。

然后, 观察已有代码,不难推断其思路:方法f中的第一个for循环构造出对称轴,即处于中心的这一行,看到最后输出语句System.out.println(s1 + s2);可以推测该思路把菱形分割成两部分,s1即上半部分,s2即下半部分。第二个for循环中,s1拼接新的一行s向上构造菱形,s2拼接新的一行s向下构造菱形,s初始时为中心这一行,显然通过补充开头的空格和末尾的x以及对旧行做改动来构造新行,不难得到,这个改动即把旧行截去末尾3个字符,这3个字符就是每行中间递减的2个空格以及末尾的1个x(之后会在末尾补充一个x)。

四、代码

public class Main
{
    public static void f(int n)
    {
        String s = "*";
        for(int i = 0; i < 2 * n - 3; i++)    s += ".";
        s += "*";

        String s1 = s + "\n";
        String s2 = "";

        for(int i = 0; i < n - 1; i++){
            s = "." + s.substring(0, s.length() - 3) + "*";
            s1 = s + "\n" + s1;
            s2 += s + "\n";
        }
        System.out.println(s1 + s2);        
    }

    public static void main(String[] args)
    {
        f(8);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值