目录
1、打印空心三角形
2、输出正反三角形
3、打印大X
4、字母图形
5、打印图形
6、打印十字图
1、打印空心三角形
输入一个数控制三角形的行数
代码语言:javascript复制 *
* *
* *
* *
* *
* *
* *
* *
* *
*******************
代码语言:javascript复制package test;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double tmp = sc.nextInt(); // 如果是其他类型的数据,则改成相应的方法即可,如float类型,那么是nextFloat();
int num = (int) tmp;
for (int i = 1; i <= num; i ) { // 行
for (int j = num - i; j > 0; j--) {// 列的空格和*
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k ) {
if (k == 1 || k == 2 * i - 1 || i == num) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.print("n");
}
}
}
2、输出正反三角形
使用循环结构打印下述图形,打印行数n由用户输入。图中每行事实上包括两部分,中间间隔空格字符数m也由用户输入。 注意:两行之间没有空行。
样例输入
5 4
样例输出
代码语言:javascript复制 * *********
*** *******
***** *****
******* ***
********* *
代码语言:javascript复制package test;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
for (int i = 0; i < n; i ) {
for (int j = 0; j < m; j )
System.out.printf(" ");
for (int j = n - i; j > 1; j--)
System.out.printf(" ");
for (int k = 0; k <= i * 2; k )
System.out.printf("*");
for (int j = 0; j < m; j )
System.out.printf(" ");
for (int k = 1; k < (n - i) * 2; k )
System.out.printf("*");
System.out.printf("n");
}
}
}
3、打印大X
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格,所有的空白位置都以句点符来代替。
要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)要求输出一个大X
例如,用户输入:
代码语言:javascript复制3 9
程序应该输出:
代码语言:javascript复制***********
*********
***********
用户输入
代码语言:javascript复制15 3
程序应该输出:
代码语言:javascript复制*** ***
*** ***
*** ***
*** ***
*** ***
*** ***
*****
***
*****
*** ***
*** ***
*** ***
*** ***
*** ***
*** ***
代码语言:javascript复制package test;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
sc.close();
f(m, n);
}
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--;
}
}
}
4、字母图形
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
代码语言:javascript复制5 7
样例输出
代码语言:javascript复制ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。
代码语言:javascript复制package test;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();// 行数
int m = sc.nextInt();// 列数
char[][] pattern = new char[26][26];
char str;
int i, j;
// 向pattern数组中添加字母元素
for (i = 0; i < n; i ) {
str = 'A';
for (j = i; j < m; j ) {
pattern[i][j] = str ;
}
str = 'A';
for (j = i - 1; j >= 0; j--) {
pattern[i][j] = str;
}
}
// 输出字符数组元素
for (i = 0; i < n; i ) {
for (j = 0; j < m; j ) {
System.out.print(pattern[i][j]);
}
System.out.println();
}
}
}
5、打印图形
如下的程序会在控制台绘制分形图(就是整体与局部自相似的图形)
当 n=1,2,3 的时候,输出如下:
请仔细分析程序,并填写划线部分缺少的代码
n=1 时:
代码语言:javascript复制 o
ooo
o
n=2 时:
代码语言:javascript复制 o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
n=3 时:
代码语言:javascript复制 o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
o o o
ooo ooo ooo
o o o
o o o o o o o o o
ooooooooooooooooooooooooooo
o o o o o o o o o
o o o
ooo ooo ooo
o o o
o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
填空:
代码语言:javascript复制public class Main {
static void show(byte[][] buf) {
for (int i = 0; i < buf.length; i ) {
for (int j = 0; j < buf[i].length; j ) {
System.out.print(buf[i][j] == 0 ? ' ' : 'o');
}
System.out.println();
}
}
static void draw(byte[][] buf, int x, int y, int size) {
if (size == 1) {
buf[y][x] = 1;
return;
}
int n = ____________; // 填空
draw(buf, x, y, n);
draw(buf, x - n, y, n);
draw(buf, x n, y, n);
draw(buf, x, y - n, n);
draw(buf, x, y n, n);
}
public static void main(String[] args) {
final int N = 3;
int t = 1;
for (int i = 0; i < N; i )
t *= 3;
byte[][] buf = new byte[t][t];
draw(buf, t / 2, t / 2, t);
show(buf);
}
}
题解:
代码语言:javascript复制package test;
public class demo {
static void show(byte[][] buf) {
for (int i = 0; i < buf.length; i ) {
for (int j = 0; j < buf[i].length; j ) {
System.out.print(buf[i][j] == 0 ? ' ' : 'o');
}
System.out.println();
}
}
static void draw(byte[][] buf, int x, int y, int size) {
if (size == 1) {
buf[y][x] = 1;
return;
}
int n = size / 3; // 填空
draw(buf, x, y, n);
draw(buf, x - n, y, n);
draw(buf, x n, y, n);
draw(buf, x, y - n, n);
draw(buf, x, y n, n);
}
public static void main(String[] args) {
final int N = 3;
int t = 1;
for (int i = 0; i < N; i )
t *= 3;
byte[][] buf = new byte[t][t];
draw(buf, t / 2, t / 2, t);
show(buf);
}
}
完成:
代码语言:javascript复制 o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
o o o
ooo ooo ooo
o o o
o o o o o o o o o
ooooooooooooooooooooooooooo
o o o o o o o o o
o o o
ooo ooo ooo
o o o
o
ooo
o
o o o
ooooooooo
o o o
o
ooo
o
6、打印十字图
资源限制 时间限制:1.0s 内存限制:256.0MB
问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式 一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式 对应包围层数的该标志。
样例输入 1
样例输出
样例输入 3
样例输出
代码语言:javascript复制package test;
import java.util.Scanner;
public class demo {
static char[][] arr;
static int s;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
s = 5 n * 4;// 观察可得,输出的均是5 n*4的矩阵
arr = new char[s][s];
for (int i = 0; i < s; i ) {
for (int j = 0; j < s; j ) {
arr[i][j] = '.';// 初始化矩阵
}
}
tian(0, s, 0);
for (int i = 0; i < s; i ) {
for (int j = 0; j < s; j ) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
sc.close();
}
// count是每次递归开始的横坐标,len是每次递归瘦两圈前的最大长度,bu是步数
private static void tian(int count, int len, int bu) {
if (bu > s / 4) { // 递归次数大于s/4就退出
arr[s / 2][s / 2] = '$'; // 填补最中心的点
return;
}
if (count != 0) {// 不是第一圈就填上四个角
arr[count][count] = arr[count][len - 1] = arr[len - 1][count] = arr[len - 1][len - 1] = '$';
}
for (int i = count 2; i < len - 2; i ) {
// 每次递归改变的第一行
arr[count][i] = arr[i][count] = arr[len - 1][i] = arr[i][len - 1] = '$';
// 每次递归改变的第二行
if (i == count 2 || i == len - 3) {
arr[count 1][i] = arr[i][count 1] = arr[len - 2][i] = arr[i][len - 2] = '$';
}
}
// count 2,len-2起到瘦两圈的效果
tian(count 2, len - 2, bu 1);
}
}