您的位置:首页 > 职场人生

黑马程序员——折纸问题、九九乘法表和菱形图案的打印

2016-01-02 01:51 507 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
折纸问题:

/*
* 	我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
分析:
为了保证数字方便运算都乘以100
因为不知道具体的循环次数,所以使用while循环
定义统计变量count=0,每折叠一次count自加一
定义纸的初始厚度n=1,每循环一次厚度变为2n,直到纸的厚度不小于884800
*/
public class Paper_folding {
public static void main(String[] args) {
int count = 0;
int n = 1;
while (n < 884800) {
n *= 2;
count++;
}
System.out.println("折叠" + count + "次后不低于珠峰的高度,此时的高度为" + n / 100 + "米。");
}
}


打印九九乘法表

/*
需求:在控制台输出九九乘法表。

首先我们写出九九乘法表:
1*1=1
1*2=2	2*2=4
1*3=3	2*3=6	3*3=9
1*4=4	2*4=8	3*4=12	4*4=16
...
1*9=9	2*9=18	3*9=27	...

我们先把这个九九乘法表看出是这样的一个形状:
*
**
***
****
*****
******
*******
********
*********
分析:
使用嵌套循环:外循环决定行数,内循环决定列数
发现列数又等于当前的行数
*/
public class Print99 {
public static void main(String[] args) {
//控制输出9行
for(int y=1;y<=9;y++){
//每一行的列数等于当前的行号
for(int x =1;x<=y;x++){
//先打印出星星图案,然后添加数字
System.out.print(x+"*"+y+"="+x*y+"\t");
}
//每输出一行后换行
System.out.println();
}
}
}
类似问题:用*打印菱形图案

嵌套for的实现

public class Prog19 {
public static void main(String[] args) {
int n = 4;
printStar(n);
}

// 打印星星
private static void printStar(int n) {
// 打印上半部分
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2 * n; j++) {
if (j < n - i)
System.out.print(" ");
if (j >= n - i && j <= n + i)
System.out.print("*");
}
System.out.println();
}
// 打印下半部分
for (int i = 1; i < n; i++) {
System.out.print(" ");
for (int j = 0; j < 2 * n - i; j++) {
if (j < i)
System.out.print(" ");
if (j >= i && j < 2 * n - i - 1)
System.out.print("*");
}
System.out.println();
}
}

}
单层for的实现

/*
* 题目:打印出如下图案(菱形)
*
***
*****
*******
*****
***
*
分析:
可以理解为先打印一个
*
***
*****
*******
再打印一个
*****
***
*
把中间*最多的行号定义为要打印的行数,即上图要打印的菱形最宽处所在的行号为4
设要打印的最宽处行号为n,则从上向中间,打印的*个数是2n-1,其他位置打印空格或不打印
实现:

用for控制打印的行数为n
先打印上半部分
先打印n-t个空格再打印2t-1个*
再打印下半部分
每行先打印t个空格,再打印2(n-t)-1个*

*/
public class Print {

public static void main(String[] args) {
// 写一个方法实现
int n = 4;
printx(n);
}

private static void printx(int n) {
// 先打印上部
// 控制行数为n
for (int t = 1; t <= n; t++) {
// 先打印n-t个空格再打印2t-1个*
int count1 = 0;
do {
if (t == n)
continue; // 如果是最后一行则不打印空格,跳出此while循环
System.out.print(" ");
count1++;
} while (count1 < n - t);

int count2 = 0;
do {
System.out.print("*");
count2++;
} while (count2 < 2 * t - 1);
System.out.println();
}
// 再打印下半部分
// 控制行数为n-1
for (int t = 1; t < n; t++) {
// 每行先打印t个空格,再打印2(n-t)-1个*
int count1 = 0;
do {
System.out.print(" ");
count1++;
} while (count1 < t);

int count2 = 0;
do {
System.out.print("*");
count2++;
} while (count2 < 2 * (n - t) - 1);
System.out.println();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息