精讲100个不同类型的Java趣味编程题的求解过程
培养编程兴趣,拓宽编程思维,提高编程能力,增强求职竞争力
专门录制了11.5小时高清视频辅助教学,高效而直观
精选的100个实例都从趣味编程的角度出发,并兼顾实用性;实例涵盖了Java程序设计的基础知识和常用算法
很多实例来自编程大赛和企业面试题,具有很强的实用价值;实例遵循先提出问题,再分析问题,最后实现的写作风格
每个实例都给出了详细的实现代码,并给出了大量的注释
《Java趣味编程100例》讲解了100个各种类型的Java编程趣味题的求解过程,旨在帮助读者培养编程兴趣,拓宽Java编程思维,提高Java编程能力,掌握用程序设计解决实际问题的方法与技巧。本书取材注重趣味性与实用性,内容涵盖了Java编程的基础知识和常用算法,讲解时给出了实例的详细代码及注释。本书附带1张光盘,收录了本书配套多媒体教学视频及实例源文件,可大大方便读者高效、直观地学习本书内容。
《Java趣味编程100例》共分11章。第1章介绍了8个常见的变幻多姿的图表;第2章介绍了12个身边的数学问题;第3章介绍了8个趣味整数;第4章介绍了9个趣味素数;第5章介绍了8个趣味方程;第6章介绍了8个趣味分数;第7章介绍了10个逻辑推理;第8章介绍了8个趣味变幻;第9章介绍了9个定理与猜想;第10章介绍了9个趣味游戏;第11章介绍了11个其他趣味问题。
《Java趣味编程100例》适合高校、职业技术院校及社会培训学校的学生阅读,也适合Java编程爱好者阅读,还可作为各级程序设计选拔赛和全国青少年信息学奥林匹克竞赛的参考书。
超值DVD光盘内容
11.5小时配套教学视频
本书涉及的源文件
377个Java开发范例源代码及22小时教学视频
24个Java开发模块源代码及6小时教学视频
5个Java项目案例源代码及4小时教学视频
第1章变幻多姿的图表
图表简洁直观,在各种场合得到广泛应用,给人以很强的视觉冲击,经常让人难以忘怀。我们的程序中如果能够灵活地应用图表,一定能给我们的程序增色不少。本章将带你进入变换多姿的图表世界,体会图表编程带来的乐趣。
1.1金字塔图案
1.问题描述
打印出金字塔图案,如图1.1所示。
2.问题分析
这个问题是一个很经典的循环应用的题目。我们都知道,打印输出的时候,都是从最左端输出,而这里,第一个星号是在中间。这实际是因为星号之前有很多空格。当我们使用问号来表示空格,实际的输出效果应该是图1.2的形式。
图1.1金字塔图1.2金字塔的分析图
从图1.2分析,我们就可以发现这个题目的奥秘了。
(1)确定程序框架
从图1.2中,我们可以发现,一共需要打印5行,而每一行都是打印几个空格,然后再打印几个星号。这样我们就可以写出程序框架了。程序框架代码如下:
publicclassCh1_1
{
publicstaticvoidmain(String[]args)
{
**************
for(i=1;i<=5;i++)//循环5次,打印5行
{
//打印若干个空格
//打印若干个星号
}
}
}
由于我们这里明确知道打印的行数,所以我们使用for循环来实现。下面我们就需要考虑如何打印每行的星号。
(2)寻找空格和星号的规律
从图1.2中,我们可以发现:第1行的空格为4个,第2行是3个,第3行是2个,……,每行依次递减,直至最后一行空格数为0;而星号数目是第1行是1个,第2行是3,第3行是5,……,每行依次递增2,直至最后一行星号数为9。总结数据,我们可以得到表1.1所示的规律。
表1.1空格和星号的规律
行数
空格数
星号数
1
4
5–1
1
1*2–1
2
3
5–2
3
2*2–1
3
2
5–3
5
3*2–1
4
1
5–4
7
4*2–1
5
0
5–5
9
5*2–1
规律
依次递减1
5–行数
依次递增2
行数*2–1
从表1.1中,我们不难发现行数和空格数、星号数之间有一种很有趣的联系。根据这个联系,我们就可以考虑完善我们上面的程序了。
(3)打印空格数
由于每行空格数有着“5–行数”的规律。所以在第i行的时候,空格数就为5–i。所以我们只要把5–i个空格打印出来即可。对应代码如下:
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)//根据外层行号,输出星号左边空格
System.out.print("");
}
虽然每行的空格数不同,但是对于特定的行,其空格数是固定的,所以循环打印的次数是确定的。所以这里同样适用了for循环。
(4)打印星号数
由于每行星号数有着“行数*2–1”的规律。所以在第i行的时候,星号数就为2*i–1。所以我们只要把2*i–1个星号打印出来即可。对应代码如下:
for(i=1;i<=5;i++)
{
for(k=1;k<=2*i-1;k++)//根据外层行号,输出星号个数
System.out.printf("*");
}
(5)完整程序
现在我们就需要把刚才的程序进行组合,构成我们的完整程序。
importjava.util.Scanner;
publicclassCh1_1
{
publicstaticvoidmain(String[]args)
{
inti,j,k,n;
Scannerinput=newScanner(System.in);
System.out.print("请输入金字塔层数:");
n=input.nextInt();
//外层循环控制层数
for(i=1;i<=n;i++)
{
//根据外层行号,输出星号左边空格
for(j=1;j<=n-i;j++)
System.out.print("");
//根据外层行号,输出星号个数
for(k=1;k<=2*i-1;k++)
System.out.printf("*");
//一行结束,换行
System.out.printf("\n");
(6)扩展训练
为了方便大家训练,我们提供几个金字塔图案的同胞兄弟——倒金字塔、直角三角形,如图1.3所示。大家可以尝试和它们过过招。
图1.3各种形状图案
1.2九九乘法表
1.问题描述
输出九九乘法口诀表,如图1.4所示。
图1.4九九乘法口诀表
2.问题分析
观察九九乘法口诀表,可以得出图表的规律:总共有9行,第几行就有几个表达式。同时要注意每行表达式的规律:第j行,表达式就从j*1开始,一直到j*j结束,共有j个表达式,这个效果可以通过一次循环实现。这样的话,正好可以通过双重循环来控制输出,外层循环控制行数,内层循环控制列。还有个地方需要注意的是,内层和外层之间的联系,内层列的个数是根据外层的行数来控制的。
……
第1章 变幻多姿的图表(教学视频:69分钟)
1.1 金字塔图案
1.2 九九乘法表
1.3 余弦曲线
1.4 奥运五环旗
1.5 杨辉三角
1.6 国际象棋棋盘
1.7 心形图
1.8 回型矩阵
1.9 小结
第2章 身边的数学问题(教学视频:59分钟)
2.1 黑色星期五
2.2 个人所得税
2.3 存钱问题
2.4 赛场统分
2.5 肇事车辆
2.6 分糖果
2.7 天平称物
2.8 平分七框梨
2.9 一维多项式计算
2.10 线性方程求解
2.11 非线性方程求解(牛顿迭代法)
2.12 非线性方程求解(二分法)
2.13 小结
第3章 趣味整数(教学视频:51分钟)
3.1 不重复的3位数
3.2 水仙花数
3.3 完全数
3.4 相亲数
3.5 黑洞数
3.6 勾股数
3.7 自守数
3.8 3位反序数
3.9 小结
第4章 趣味素数(教学视频:61分钟)
4.1 素数
4.2 孪生素数
4.3 金蝉素数
4.4 可逆素数
4.5 回文素数
4.6 平方回文素数
4.7 梅森尼数
4.8 哥德巴赫猜想
4.9 等差素数数列
4.10 小结
第5章 趣味方程(教学视频:59分钟)
5.1 百鸡百钱
5.2 楼梯台阶
5.3 换硬币
5.4 求s=a+aa+aaa+aa…a的值
5.5 鸡兔同笼
5.6 巧算年龄
5.7 五家共井
5.8 三色球问题
5.9 小结
第6章 趣味分数(教学视频:63分钟)
6.1 最大公约数
6.2 最小公倍数
6.3 分数比较
6.4 分数求和
6.5 埃及分数式
6.6 计算分数精确值
6.7 分数数列
6.8 猴子分桃
6.9 小结
第7章 逻辑推理(教学视频:63分钟)
7.1 斐波那契数列
7.2 汉诺塔问题
7.3 年龄问题
7.4 谁在说谎
7.5 幂数列
7.6 游客国籍
7.7 谁家孩子跑得最慢
7.8 猴子爬山
7.9 兔子产仔
7.10 舍罕王赏麦
7.11 小结
第8章 趣味变幻( 教学视频:62分钟)
8.1 分解质因数
8.2 乘式还原
8.3 除式还原
8.4 幻方
8.5 泊松分酒
8.6 猜牌术
8.7 邮票组合
8.8 整数拆分
8.9 小结
第9章 定理与猜想( 教学视频:64分钟)
9.1 四色定理
9.2 角谷猜想
9.3 Л的近似值(割圆术)
9.4 Л的近似值(蒙特卡罗)
9.5 回文数
9.6 卡布列克常数
9.7 剩余定理
9.8 尼科彻斯定理
9.9 马踏棋盘
9.10 小结
第10章 趣味游戏( 教学视频:67分钟)
10.1 掷骰子
10.2 发扑克牌
10.3 24点
10.4 常胜将军
10.5 抢30
10.6 10点半
10.7 人机猜数
10.8 过桥游戏
10.9 生命游戏
10.10 小结
第11章 其他趣味问题( 教学视频:71分钟)
11.1 字符串匹配
11.2 双色球
11.3 金额转换
11.4 超长整数加法
11.5 尾数前移
11.6 高斯八皇后
11.7 PK计分
11.8 罗马数字
11.9 找假币
11.10 窃贼问题
11.11 三色旗
11.12 小结