九九乘法表

精典程序:九九乘法表

思想:用循环解决各种形状问题

(1)

*

* *

* * *

(2)

*

* *

* * * *

* * * * * *

(3)九九乘法表的形状

1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

思想:

1、 这里面有两个数相乘,产生两个数

1-9 乘以 1-9,这里未知数是两个,这两个数字交叉相叉。

凡是思想中存在两值交叉的现象,就是双重循环

两个交叉相乘属于笛卡尔积

构建出来

调整结构

分出行和列的关系

打印的几种函数:

Println 实现的效果:每打印一行,就换行,

Print 实现的效果:不换行

Printf 按某种格式输出,使用 format 格式化的形式输出,不换行

打印过程中的转义字符

需要代表某些特殊意义的字符,称为转义字符

比如两个数据之间长空白(8 个) 制表符 \t

还比如 \n 实现换行

最麻烦的”” ,在 java 编程中,单引号和双引号都有特殊意义,双引号内部输出双引号,可以使

用转义\,加上一个引号

System.out.print("\"");

如果输出斜杠,使用两个斜杠.

System.out.print("\\");

原来

1*1=1 1*2=2 1*3=3 行,转成列

第一个乘数是 i,第二个乘数是 j

根据打印的结果,j<=i 的就打印结果,j>i 的就不打印结果

代码如下:

public class test_nine_nine_multi {

public static void main(String[] args) {

//产生笛卡尔积相乘的两个数字,这就是双重循环

for(int i=1;i<10;i++){

for(int j=1;j<10;j++){

//满足条件的打印,根据去掉部分的特点,j>i的不打印,只打印 j<=i

//注意第一个乘数是 i,第二个乘数是 j,调用位置相当于把行列调换

if(j<=i){

System.out.print(j+"*"+i+"="+i*j+"\t");

}

}

//每打完 9个数字,换个行,第一重循环结束打印换行

System.out.println();

}

}

}

正向思路:

只要 j>i 就使用 break 退出

public class test_nine_nine_multi1 {

public static void main(String[] args) {

//产生笛卡尔积相乘的两个数字,这就是双重循环

for(int i=1;i<10;i++){

for(int j=1;j<10;j++){

//满足条件的打印,根据去掉部分的特点,j>i的不打印,后面的都不打印,节省循环,以直接退出循环

if(j>i){

//这里 break退出,只要打印列数>行数,后面就不循环了,这种方法循环次数会少一些

break;

}

//注意第一个乘数是 i,第二个乘数是 j,调用位置相当于把行列调换

System.out.print(j+"*"+i+"="+i*j+"\t");

}

//每打完 9个数字,换个行,第一重循环结束打印换行

System.out.println();

}

}

}

这个程序比上一次程序循环次数减少.

现在再改,如果 j==i,打印完当次结果,就没有必要再进入循环体,再进入循环体也就是判断退

出,把 j==i 条件放在打印的后面.

最后再优化,把 j==i 后面的循环都不进行操作,这种量级减少循环

public class test_nine_nine_multi2 {

public static void main(String[] args) {

//产生笛卡尔积相乘的两个数字,这就是双重循环

for(int i=1;i<10;i++){

for(int j=1;j<10;j++){

//注意第一个乘数是 i,第二个乘数是 j,调用位置相当于把行列调换

System.out.print(j+"*"+i+"="+i*j+"\t");

//满足条件的打印,根据去掉部分的特点,j=i的打印结束,后面的循环没有必要了

if(j==i){

//这里 break退出,后面的循环完全没有必要

break;

}

}

//每打完 9个数字,换个行,第一重循环结束打印换行

System.out.println();

}

}

}

对比 class 字节的处理

for(int i = 1; i < 10; ++i) {

for(int j = 1; j < 10 && j <= i; ++j) {

System.out.print(j + "*" + i + "=" + i * j + "\t");

}

System.out.println();

}

这种比上面的代码还科学

算法的大 O

第一种双重循环,达到某一条件打印: O(n 平方 )

第二种双重循环:<o 的平方结果的一半

第三种双重循环,比第二重循环少了外层量级的循环次数

在多重循环中,考虑内层循环是否可以再量级减少循环次数.

break 退出,退出一层循环,改变当前层的循环次数

continue 退出:退出当前循环的次数,继续下次循环,不改变总体的循环次数

共同点:都不执行循环体中后面的语句

不同点:continue 结束当前,break 结束本层循环

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值