public
class
light
{
private
int
watts
private
boolean
indicator
/**
*
@param
watts
*
:创建具有watts瓦的对象
*/
public
light(int
watts)
{
this.watts
=
watts
}
/**
*
@param
watts
*
:创建具有watts瓦的对象
*
*
@param
indicator
*
:创建具有watts瓦,开关状态
为indicator的对象
*/
public
light(int
watts,
boolean
indicator)
{
super()
this.watts
=
watts
this.indicator
=
indicator
}
/**
*
开灯,即灯的状态置为开
*/
public
void
swithoh()
{
this.indicator
=
true
}
/橘圆洞**
*
关灯
*/
public
void
printlnoff()
{
this.indicator
=
false
}
/**
*
输出灯的瓦数信圆枯息和开灯的状态·
*/
public
void
printlnfo()
{
system.out.println("灯的瓦数是:"
+
this.watts
+
"\n开关状态是:"
+
this.indicator)
}
}
假设前提:初始状态是键大灭的,有两种算法,一种常规算法,一种智能算法,打印结果:1
4
9
16
25
36
49
64
81
100
---------------------------------------------------
public class Test {
/**
* @param 两种方法打印100盏灯的状态
*/
public static void main(String[] args) {
//printStatus(100)
printStatusX(100)
}
/**
* 打印所有最终亮灯的编号 常规算法
*
* @param cout 灯的数量
*/
static void printStatus(int count) {
if (count <1) {
throw new IllegalArgumentException("illegal argument!")
}
for (int i = 1i <= counti++) {
// 如果是第一盏灯,那么它应该是亮的
if (i == 1) {
System.out.println("1")
continue
}
// 如果不是第一盏灯,那么它肯定至少被按过两次,所以假定是灭的(false)
boolean status = false
// 除去至少按过的两次,对于编号对于2到编号减1的整数,如果能够整除,就改变一次灯的状态
for (int j = 2j <ij++) {
if (i % j == 0) {
status = !status
}
}
// 如果灯腊物是亮的,打印其编号
if (status) {
System.out.println(i)
}
}
}
/**
* 打印所有最终亮灯的编号 智能算法
* 如果被按的次数是奇数,那么灯就是亮着的,第i盏灯被按的奇偶是:如果i==1,被按1次,
* 如果i>1,i可以整除的数是:1,x2,x3,x4...xc,xb,xa,i,因此可以得到下列等式:
* 1*i=i,x2*xa=i,x3*xb=i,x4*xc=i,都是成对的,只有存在两个因数相同的情况下,
* i可以整稿局竖除的数才是奇数,因此,当i是整数平方数时,它是亮着的.
*
* @param cout 灯的数量
*/
static void printStatusX(int cout) {
if (cout <1) {
throw new IllegalArgumentException("illegal argument!")
}
for(int i=1i<=couti++){
double d = Math.sqrt(i)
if((int)d == d){
System.out.println(i)
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)