编程算法基础-3.1自顶向下风格

第三讲 风格与模式

3.1自顶向下风格

复杂问题分解,直到小问题足够简单,能够掌控为止

是一种思考方式

把大的任务不断的分解为更小的子任务

还有一法宝:忽略,忽略细节

程序问题

制定框架---》逐步细化---》逐步精华---》分解为子问题

打印特定的形状

做一个二维数组的缓冲区

向缓冲区输出

缓冲区输出屏幕上

数组初始元素都是0

表格:横线。竖线。

/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
package topToBottom;

public class Print {
    public static void main(String[] args) {
       char[][] a = new char[20][50];
       for(int i=0;i<4;i++){
           line_h(a, i*3, 0, 32);
       }
       for(int i=0;i<9;i++){
           line_v(a, i*4, 0, 9);
       }
       print(a);
    }

    //写入列
    public static void line_v(char  [][]a,int col,int row_start,int row_end){
       for(int i=row_start;i<=row_end;i++){
           a[i][col] = ‘$‘;
       }
    }

    //写入行
    public static void line_h(char  [][]a,int row,int col_start,int col_end){
       for(int i=col_start;i<=col_end;i++){
           a[row][i] = ‘$‘;
       }
    }

    //打印
    public static void print(char[][] a){
       for(int i=0;i<a.length;i++){
           for(int j=0;j<a[i].length;j++){
              if(a[i][j]==0){
                  System.out.print(" ");
              }else{
                  System.out.print(a[i][j]);
              }
           }
           System.out.println();
       }
    }
}
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$   $   $   $   $   $   $   $   $
$   $   $   $   $   $   $   $   $
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                

Word排版问题,没有对齐

设计程序-打印

设计程序-打印
/*
设计程序
在中文Windows环境下,控制台窗体中也能够用特殊符号拼出美丽的表格来。
比方:
┌─┬─┐
│ │ │
├─┼─┤
│ │ │
└─┴─┘
事实上,它是由例如以下的符号拼接的:
左上 = ┌
上 = ┬
右上 = ┐
左 = ├
中心 = ┼
右 = ┤
左下= └
下 = ┴
右下 = ┘
垂直 = │
水平 = ─
本题目要求编写一个程序,依据用户输入的行、列数画出对应的表格来。
比如用户输入:
3 2
则程序输出:
┌─┬─┐
│ │ │
├─┼─┤
│ │ │
├─┼─┤
│ │ │
└─┴─┘
用户输入:
2 3
则程序输出:
┌─┬─┬─┐
│ │ │ │
├─┼─┼─┤
│ │ │ │
└─┴─┴─┘
*/

package topToBottom;

public class Code {
	public static void main(String[] args) {
		int a = 2;//行数
		int b = 3;//列数
		createArray(a, b);
	}
	//创建数组
	public static void createArray(int a,int b){
		char[][] c = new char[2*a+1][2*b+1];
		c[0][0] = ‘┌‘;//左上
		c[0][2*b+1-1] = ‘┐‘;//右上
		c[2*a+1-1][0] = ‘└‘;//左下
		c[2*a+1-1][2*b+1-1] = ‘┘‘;//右下

		firstAndLastRow(c, a, b);
		singleRow(c, a, b);
		doubleRow(c, a, b);
		singleColumn(c, a, b);
		printGrid(c,a,b);
	}
	//第奇数列
	public static char[][] singleColumn(char[][] c,int a,int b){
		for(int i=0;i<2*a+1;i+=2){
			for(int j=1;j<2*b;j+=2){
				c[i][j]=‘─‘;
			}
		}
		return c;
	}
	//第偶数行
	public static char[][] doubleRow(char[][]c,int a,int b){
		for(int i=2;i<2*a-1;i+=2){
			c[i][0] = ‘├‘;
			c[i][2*b] = ‘┤‘;
			for(int j=2;j<2*b;j+=2){
				c[i][j] = ‘┼‘;
			}
		}
		return c;
	}

	//第奇数行
	public static char[][] singleRow(char[][]c,int a,int b){
		for(int i=1;i<2*a;i+=2){
			for(int j=0;j<2*b+1;j+=2){
				c[i][j]=‘│‘;
			}
		}
		return c;
	}

	//第一行和最后一行
	public static char[][] firstAndLastRow(char[][]c,int a,int b){
		for(int i=2;i<2*b+1-1;i+=2){//第一行和最后一行
			c[0][i] = ‘┬‘;
			c[2*a+1-1][i] = ‘┴‘;
		}
		return c;
	}
	//打印表格
	public static void printGrid(char[][] c,int a,int b){
		for(int i=0;i<2*a+1;i++){
			for(int j=0;j<2*b+1;j++){
				System.out.print(c[i][j]);
			}
			System.out.println();
		}
	}
}
┌─┬─┬─┐
│ │ │ │
├─┼─┼─┤
│ │ │ │
└─┴─┴─┘
时间: 2024-11-11 05:33:05

编程算法基础-3.1自顶向下风格的相关文章

编程算法基础-3.2自底向上风格

3.2自底向上风格 自顶向下不是万能的 需求发生变化时,会很尴尬 变化是需求的本质特征 内部或外界的环境一旦发生小小的变化,就会造成很大的变动 个人---完全掌控----->简单的软件逻辑<-----完全计划的模式 小组协作---掌控变化---->庞大的软件规模---产生-->自适应变化<-----解决-----主流解决方案:面向对象 面向对象正是采用自底向上的设计风格 打印控制台表格2 实际开发中,使用混合风格,根据项目的要求而定 需求:不变,变 不变--->多种风格

编程算法基础3.3-测试驱动风格

cocos2d-x升级到3.0后变化不小,除了API的变化(主要是函数和类名称变化,以及使用了C++11的不少特性,function/bind, lamda, std::thread-),创建和编译工程也做了一些简化调整.本文主要讨论一下cocos2d-x3.0 在android平台开发的环境设置及工程创建编译流程. 1.   初始设置 除了2.x所需要的python,jdk, android sdk和ndk之外,还需要部署apache-ant. 1)      在path中设置好java环境变

编程算法基础-一刀切法

1.5一刀切法 编程和编筐一样,处理边缘问题相同重要. 程序逻辑 開始 中间 结束 一刀切法上式 用空格或逗号分隔的串,提取为各个部分 abc ttt,kmd,uuu xyz 切分成每一部分. /* * "abc ttt,kmd,uuu xyz" 用逗号或者空格隔开字符串 分解为各个部分 */ package OneCut; public class SplitString { public static void main(String[] args) { // 一刀切(上式:事先补

编程算法基础-2.7作业-通讯编码-格式检查

作业 通信编码 如果通信的物理设备仅仅能表示1和0两种状态. 1和0状态都不能持续太久,否则物理设备会出现问题.因而人们设计出一种变通的方法: 多个0后人为地补入一个1 多个1后人为地补入一个0 当然,在解码的时候,要对应处理. 以下我们用串来模拟这个算法. 如果有须要通信的串: String s = "1010100100100001011110100010101010100001010101111"; 连续的3个0,后须要插入一个1 连续的3个1,后须要输入一个0 10101001

编程算法基础-2.3进制转换

2.3进制转换 使用int存一个整数时.内存中是用二进制存储的,当要显示的时候.用十进制显示. 随意进制间的转换 n进制转m进制 String s = "2001201102" 3进制转换为5进制 先转换为2进制.再转换为5进制 /* 随意进制间的转换 n进制转m进制 String s = "2001201102" 3进制转换为5进制 先转换为10进制,再转换为5进制 */ package BinaryTrans; public class NToM { publi

编程算法基础-暴力破解法

1.1   暴力破解法 鸡兔同笼 50头,120脚,鸡兔分别几仅仅? /*鸡兔同笼 * 鸡兔同笼,头50,脚120 * 鸡兔几何? */ package ChickRabbit; public class ChickRabbit { public static void main(String[] args){ int chick; int rabbit; int HEAD=50; int FEET=120; for(chick=0;chick<=HEAD;chick++){ rabbit=HE

03-01自顶向下风格_编程

设计程序 在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来. 比如: ┌─┬─┐ │   │  │ ├─┼─┤ │   │  │ └─┴─┘ 其实,它是由如下的符号拼接的: 左上 = ┌ 上 = ┬ 右上 = ┐ 左 = ├ 中心 = ┼ 右 = ┤ 左下= └ 下 = ┴ 右下 = ┘ 垂直 = │ 水平 = ─ 本题目要求编写一个程序,根据用户输入的行.列数画出相应的表格来. 例如用户输入: 3 2 则程序输出: ┌─┬─┐ │   │  │ ├─┼─┤ │   │ 

十大编程算法助程序员走上大神之路

概述:编程算法,是完成程序逻辑的主要途径.本文推荐十大编程算法,有利于程序员的编程逻辑. 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(lis

转发---十大编程算法助程序员走上大神之路

十大编程算法助程序员走上大神之路 本文为转发,源地址:http://linux.cn/article-3613-1.html 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and co