11 八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著
名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。编写程序给出一个解决方案
12 一个学校有100个储物柜和100个学生。所有储物柜在上学的第一天都是关着的。随着
学生进来,第一个学生用s1表示,打开每个柜子,然后第二个学生,用s2表示,从第二个柜子开始,第二个柜子用L2表示,然后关闭其他的柜子。学生s3从第三个柜子开始,然后改变每个柜子(如果它是开着就关上,如果它是关上就打开)。学生s4从柜子L4开始,然后改变每个柜子。学生s5从柜子L5开始,然后改变每个柜子。以此类推,直到s100改变L100为止。
在所有学生经过教学楼并改变了柜子后,哪些柜子是开着的,编写程序找出答案
提示:使用存放100个布尔类型元素的数组,每个元素表明一个柜子是开的还是关的,初始状态,所有柜子都是关的。
13. 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 写一个排序方法,方法头如下所示:
public int[] sort(int[] array)
对数组进行从小到大进行排序,编写测试程序,读取10个int类型数字,调用该方法,然后显示排好序的数组。
14.(完全相同的数组)如果两个数组list1和list2长度相同,而且对于每个i,list1[i]都等于list2[i],则认为list1和list2是完全相同的,使用下面方法头编写一个方法,如果list1和list2完全相同,那么这个方法返回true public Boolean equal(int[] list1 int[] list2)
编写一个测试程序,提示用户输入两个整数数列,然后显示这两个整数数列是否完全相同。 15.(数学方面:组合)编写一个程序,提示用户输入10个整数,然后显示从10个数中选出两个数的所有组合
16.(模式识别方面,四个连续相等的数)编写下面的方法,测试某个数组中是否有四个连续的值相同的数字 public Boolean isConsecutiveFour(int[] values)
编写测试程序,提示用户输入一个整数数列,如果这个数列有四个连续的具有相同值的数,那就显示true,否则显示false。 二维数组
17 编写一个方法,求整数矩阵所有整数之和,使用下列方法头:
public double sumMatrix(int [][] m)
编写一个测试程序,读取一个3*3 的矩阵,然后显示所有元素的和。下面是一个运行示例:
Enter a 3-by-3 matrix row by row : 1 2 3
4 5 6 7 8 9
Sum of matrix is 136
18编写一个方法,求n*n矩阵主对角线所有整数之和,使用下列方法头:
public double sumMajorDiagonal(int [][] m)
编写一个测试程序,读取一个3*3 的矩阵,然后显示主对角线所有元素的和。下面是一个运行示例:
Enter a 3-by-3 matrix row by row : 1 2 3 4 5 6 7 8 9
Sum of the element in the major diagonal is 15
import java.util.*; public class lianxi29 {
public static void main(String[] args) { Scanner s = new Scanner(System.in); int[][] a = new int[3][3];
System.out.println(\请输入9个整数:\ for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { a[i][j] = s.nextInt(); } }
System.out.println(\输入的3 * 3 矩阵是:\ for(int i=0; i<3; i++) { for(int j=0; j<3; j++) {
System.out.print(a[i][j] + \ }
System.out.println(); }
int sum = 0;
for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { if(i == j) { sum += a[i][j]; } } }
System.out.println(\对角线之和是:\} }
6.类设计部分
1. 设计一个MyInteger类,这个类包括
一个名字为value的int型属性值,用来存储这个对象表示的int值 一个为int值创建MyInteger的有参和无参构造方法 set 和get方法
如果value为偶数、奇数和素数,那么isEven()、isOdd()和isPrime()方法都会返回true
如果指定值为偶数、奇数和素数,那么isEven(int)、isOdd(int)和isPrime(int)方法都会返回true
实现这个类,编写程序测试这个类
2. 设计MyPoint类,表示一个带x坐标和y坐标的点,该类包括
属性 x和y分别表示坐标
创建点(0,0)无参构造方法和创建特定点的有参构造方法 两个属性的set和get
一个名为distantce的方法,返回MyPont类型两个点之间的距离
一个名为distantce的方法,返回指定x和y坐标的两个点之间的距离 实现这个类,编写程序测试这个类
3. 设计一个矩形类Rctangle,这个类包括
属性width和height,分别表示矩形的宽和高
创建宽和高为1的无参构造方法和创建特定宽和高的有参构造方法 两个属性的set和get
一个名为getArea()返回这个矩形的面积 一个名为getPerimeter()返回这个矩形的周长 实现这个类,编写程序测试这个类
4. 设计一个股票类Stock,这个类包括:
一个名为symbol字符串表示股票代码 一个名为name字符串表示股票的名字
一个名为previousPrice的double型数据,它存储的是前一日的股票值 一个名为currentPrice的double型数据,它存储的是当时的股票值 创建一个有特定代码和名字的股票构造方法 各属性的set 和get
一个名为getChangePercent()方法返回从previousPrice到currentPrice的百分比 实现这个类,编写程序测试这个类,创建一个Stock对象,他的股票代码是Java,股票名字为Sun Microsystems Inc,前一日收盘价是4.5,设置当前值是 4.35,然后显示市值变化的百分比。
5. 帐号类Account,设计一个名为Account的类,它包括
一个名为id的int类型的私有属性 一个名为balance的double型属性,存放money
一个名为annualIntegerRate的double型属性,存放当前利率 一个名为dateCreated的String类型存储帐号的开户日期 写无参和带参构造方法 各属性的set和get
一个withdraw方法从帐号提取特定数额
一个deposit方法向帐号存储特定数额
实现这个类,编写程序测试这个类, 创建一个帐号为1122,余额为20000,年利率为4.5%的Account帐号,使用withdraw 方法取款2500,使用deposit方法存款3000,然后打印余额和开户日期
6. 设计一个名为Fan的风扇类,这个类包括:
三个名为SLOW MEDIUM 和FAST而值是1,2,3的常量表示风扇的速度 一个名为speed的int类型私有属性表示风扇的速度,默认为SLOW 一个名为on的boolean类型私有属性表示风扇是否打开,默认是false 一个名为radius的double类型私有属性表示风扇的半径,默认是5 一个名为color的String类型私有属性表示风扇的颜色,默认为blue 属性的set和get方法
默认风扇的无参和有参构造方法
一个名为toString()方法,返回描述风扇的字符串,如果风扇是打开的,那么该方法在yield组合字符串中返回风扇的速度、颜色和半径,如果风扇没打开,该方法会返回一个由“fan is off和风扇半径颜色组成的字符串。 实现这个类,编写程序测试这个类,创建Fan对象,设置相关属性,然后调用toString方法显示这些对象。
7. (几何方面:正n边型)在一个正n边形,所有边长度都相同,所有角的度数都相同(这
个n边型是等边等角的)。设计一个名为RegularPolygon的类,该类包括:
一个名为n的int类型私有属性表示多边形的边数,默认值为3 一个名为side的double类型私有属性表示边的长度,默认值为1
一个名为x的double类型私有属性表示多边形中点的x坐标,默认值为0 一个名为y的double类型私有属性表示多边形中点的y坐标,默认值为0 一个创建带默认值正多边形的无参构造方法
一个能创建带指定边数和边长度,中心在(x,y)的正多边形的有参构造方法 所有属性的set和get
一个返回多边形周长方法getPerimeter()
一个返回多边形周长方法getArea(),计算多边形面积的公式是: 面积 = (n*s*s)/(4* tan(p/n))
实现这个类,编写程序测试这个类,创建RegularPolygon(10,4,5.6,7.8)对象,显示对象的周长和面积。
8. (代数方面:二次方程式)为二次方程式ax*x + b*x + c=0 设计一个i额名为
QuadraticEquation 的类。这个类包括:
代表三个系数的私有属性 a,b,c a,b,c的set和get
带参和无参的构造方法
一个名为getDiscriminant()的方法返回判别式 b*b-4*a*c
一个名为getRoot1() 和getRoot2()的方法返回等式的两个根,这些方法只有在判别式为非负数才有用,如果判别式为负数,这些方法返回0.
实现这个类,编写程序测试这个类,提示用户输入 a,b,c,然后显示判别式的结果,如果判别式为正数,显示2个根,如果判别式为0,显示1个根,否则显示无根。
9. 设计一个名为TV的电视类,这个类包括:
一个名为channel的int类型私有属性表示当前的频道,默认为1
一个名为on的boolean类型私有属性表示电视是否打开,默认是false 一个名为volumeLevel的int类型私有属性表示声音的声量,默认是1 属性的set和get方法
默认电视的无参和有参构造方法
一个名为turnOn()方法,功能打开电视。 一个名为turnOff()方法,功能关闭电视。
名为channelUp()和channelDown()方法,分别实现频道数加一和减一功能 名为VolumeUp()和VolumeDown()方法,分别实现音量加一和减一功能
实现这个类,编写程序测试这个类,创建TV对象,设置相关属性,然后调用相关方法进行测试。
10. (几何方面:MyRectangle2D)类,定义MyRectangle2D类,包含:
两个名为x和y的double类型属性,定义矩形的中心点, 两个名为width和length的double类型属性,定义矩形宽和长 Get 和set
无参构造方法,创建 x,y都为0,width和length都为1默认矩形 方法getArea()返回矩形面积 方法getPerimeter()返回矩形周长
如果给定点(x,y)在矩形内,则方法 contains(double x,double y) 返回true 如果给定矩形在这个矩形内,则方法 contains(MyRectangle2D r)返回 true 实现这个类,编写程序测试这个类,创建对象r1(new MyRectangle2D(2,2,5.5,4.9)) ,显示它面积和周长,并判断r1.contains(3,3),ri.contains(new MyRectangle2D(3,5,2.3,5.4))
11. 设计一个Person类和它两个名为Student和Employee子类,Employee又有子类:教员
类Faculty和职员类Staff,。每个人都有姓名、电话号码、地址、和电子邮件地址,学生有班级状态(大一、大二、大三或者大四)。将这些状态定义为常量。一个雇员有办公室、工资和受聘日期。定义一个名为MyDate的类,包含数据域:year,month,和day,教员有办公时间和级别,职员有职务称号,覆盖每个类的toString方法,显示相应的类名和人名。
实现这些类,编写程序测试这些类,并且调用他们toString()方法
12. (帐号类Account的子类) 在练习题5中定义了一个Account类来建模一个银行帐号。一
个帐号有帐号,余额,年利率,开户日期等属性,以及存款和取款等方法。创建两个检测支票帐号(checking account)和储蓄帐号(saving account)的子类。支票帐号有一个透支限定额,但储蓄帐号不能透支。
实现这些类,编写一个测试程序,创建Account,SavingsAccount和CheckingAccount的对象,然后调用它们toString()方法。
13. (三角形Triangle)设计一个名为Triangle的类来描述三角形,该类包括:
三个名为side1,side2,side3的double类型属性表示三角形的三个边,它们的默认值是1.0
一个无参构造方法 一个带参的构造方法
set 和get方法
一个名为getAera()方法返回这个三角形的面积 一个名为getPerimeter()方法返回这个三角形的周长
一个名为toString方法返回这个三角形三边的字符串描述
实现这类,编写一个测试程序,常见长为1,1.5和1的三角形,显示他的面积,周长以及toString()方法显示三边描述
14. (ComparableCircle类)创建一个名为ComparableCircle类,它扩展Circle类并实现
Compare接口,其中:
Compare接口包括一个比较方法 CompareTo()
public int compareTo(Object o) ;
当这个对象相对于比较对象o来说,当这个对象大于、等于或小于给定对象o时候,分别返回正整数,零和负整数。 Circle类包括:
一个半价radius属性,默认值为1 一个无参构造方法 一个带参的构造方法 set 和get方法
一个名为getAera()方法返回这个圆类的面积 一个名为getPerimeter()方法返回这个圆类的周长
一个名为toString()方法返回这个圆形半价的字符串描述
ComparableCircle类实现接口CompareTo方法,可以比较两个圆的大小,要求根据面积比较两个圆。
编写测试程序求出ComparableCircle类的两个实例中的最大者。
15. 修改题目3的Rectangle类,实现Compare接口,并覆盖Object类的equals方法,当两
个Rectangle对象面积相等时候,则这两个对象是相同的。其中:Compare接口包括一个比较方法 CompareTo()
public int compareTo(Object o) ;
当这个对象相对于比较对象o来说,当这个对象大于、等于或小于给定对象o时候,分别返回正整数,零和负整数。
Rectangle类实现接口CompareTo方法,可以比较两个矩形的大小,要求根据面积比较两个矩形。
编写测试程序求出Rectangle类的两个实例中的最大者。
16. 如下所示:
Public double sumArea(Shape [] a)
编写测试程序,创建四个对象(两个圆和两个矩形)的数组,使用sumArea(求集合对象面积之和)编写一个方法,求数组中所有几何对象的面积之和,方法求总面积