zoukankan      html  css  js  c++  java
  • Java实现第九届蓝桥杯打印大X

    打印大X
    题目描述
    如下的程序目的是在控制台打印输出大X。
    可以控制两个参数:图形的高度,以及笔宽。
    
    用程序中的测试数据输出效果:
    (如果显示有问题,可以参看p1.png)
    
    高度=15, 笔宽=3
    ***           ***
     ***         ***
      ***       ***
       ***     ***
        ***   ***
         *** ***
          *****
           ***
          *****
         *** ***
        ***   ***
       ***     ***
      ***       ***
     ***         ***
    ***           ***
    高度=8, 笔宽=5
    *****  *****
     **********
      ********
       ******
       ******
      ********
     **********
    *****  *****
    
    请仔细分析程序流程,填写缺失的代码。
    

    在这里插入图片描述
    PS:
    这题的思路,有图形,且确实填空代码不报错的情况。快捷的办法就是先运行一遍,结果发现缺失的代码对应每个图形的类似部位,都在中间,这样就有思路了,这样在认真读题,结合残缺图形,很容易得到答案,
    我之前有发过一题,也是打印大X,个人觉得我的算法至少在代码简洁度上比这个要好得多,其他的效率什么的就不太清除了,欢迎大家找我讨论;

    首先,看看没有这一行执行是什么样子

    在这里插入图片描述
    证明,填写的地方就是交叉的地方,并且是打印*的地方,只有一行

    q永远是大的,p永远是小的
    当向中间靠拢的时候他们的差是比较小的

    		  int a1 = 0;
              int a2 = h - 1;
              int p = Math.min(a1,a2);
              int q = Math.max(a1+w,a2+w);
    

    既然是代码填空题,想不明白的时候多试试,结果就出来了
    好记性不如烂笔头,尝试才能出结果,空想就真的空了
    下面附上整体代码

    package Lqb;
    
    public class Text32 {
    	public static void main(String[] args) {
    		f(15,3);
    		f(8,5);
    	}
    	static void f(int h, int w){
    		System.out.println(String.format("高度=%d, 笔宽=%d",h,w));
    		int a1 = 0;
    		int a2 = h - 1;
    		
    		for(int k=0; k<h; k++){
    			int p = Math.min(a1,a2);
    			int q = Math.max(a1+w,a2+w);
    			
    			for(int i=0; i<p; i++) System.out.print(" ");
    			
    			if(q-p<w*2){
    				for(int i=0; i<q-p; i++) System.out.print("*"); ; //填空
    			}
    			else{
    				for(int i=0; i<w; i++) System.out.print("*");
    				for(int i=0; i<q-p-w*2; i++) System.out.print(" ");
    				for(int i=0; i<w; i++) System.out.print("*");
    			}
    			System.out.println();
    			a1++;
    			a2--;
    		}
    	}
    }
    
    
  • 相关阅读:
    【转】C#使用PrintDocument打印 多页 打印预览
    【转】线程间操作无效: 从不是创建控件“textBox2” 的线程访问它。
    C# 定时执行方法: System.Timers.Timer用法示例
    SQL查找数据库中所有没有主键的数据表脚本
    linux之shell编程基本语法
    Linux之shell编程条件判断-if,while,for,case
    Linux之shell编程函数使用
    2.sparkSQL--DataFrames与RDDs的相互转换
    Spark2.1集群安装(standalone模式)
    storm1.0节点间消息传递过久分析及调优
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947775.html
Copyright © 2011-2022 走看看