java编程!急急急!
发布网友
发布时间:2022-05-19 07:29
我来回答
共6个回答
热心网友
时间:2023-10-08 22:00
class Test02{
public static void main(String[] args){
for(int i =1;i<=100;i++){/*循环100盏灯*/
int temp = 0;/*记录灯被拉的次数*/
for(int j=1;j<=i;j++){/*只有小于次灯编号的人,才有机会拉*/
if(i%j==0){/*判断此灯是否是此人的倍数*/
temp++;/*增加拉灯次数*/
}
}
System.out.println( i + "号灯: "+(temp%2==0?"灭":"亮"));
}
}
}
热心网友
时间:2023-10-08 22:00
这个题很经典,在一本算法书上看过。
楼上的人全错了。 他们的算法效率基本上都是O(n),还有O(n^2)的,如果是100w盏灯呢?累吐血了吧。
正解: 最后亮的灯是完全平方数。
解释: 任何一个数,如果能被整除,都是一对的,例如 12 ,能被 3,4整除,所以3,4各拨一次,所以12这盏灯的状态还是灭的,再比如 11, 能被1和11整除,所以11也是灭的,
完全平方数就不一样了。 例如 4, 虽然1和4各拨一次,但是 2*2 =4, 2拨一次就没有另一数拨了。 所以4最后是亮的。
程序只是个参考:
public static void main(String[] args) {
int i,j;
i=1;
j=0;
while(j<100){
j = i*i;
i++;
System.out.println(j);
}
}
热心网友
时间:2023-10-08 22:01
程序已经跑过,并且经过验证。
以下有程序的详细注释,
运行结果为:
第1灯是亮
第4灯是亮
第9灯是亮
第16灯是亮
第25灯是亮
第36灯是亮
第49灯是亮
第64灯是亮
第81灯是亮
第100灯是亮
程序代码如下:有疑问发信息。
public class Test_1 {
private static boolean[] lamp = new boolean[100];
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) { //总共一百人
for (int j = 1; j <= 100; j++) {//设置可能拉灯的次数最多为100次
if (i * j <= 100) { //如果他的倍数小于100执行拉灯操作
if (lamp[i * j - 1] == false) {//如果灯暗,那么拉等后为亮
lamp[i * j - 1] = true;
} else { //如果灯亮,那么拉等后为暗
lamp[i * j - 1] = false;
}
}
}
}
for (int k = 0; k <= 99; k++) {//输出所有灯为亮的编号
if (lamp[k] == true) {
System.out.println("第" + (k + 1) + "灯是亮");
}
}
}
}
热心网友
时间:2023-10-08 22:01
oatn - 经理 你解的太精妙了!!佩服!!!!!!!!
热心网友
时间:2023-10-08 22:02
晕,现在那些老师都*SB出这种白痴题目有意义吗?我都晕了,看题目就晕了
热心网友
时间:2023-10-08 22:03
import java.util.*;
class Ower
{
public void Ower()
{
int[] arr=new int[100];// 定义100个灯被拉 的次数
int i=0;
int j=1;
String str[2]={"灭","亮"};//灯的状态
Array.fill(arr,0);
for(i=0;i<100;i++)
{
for(j=1;j<101;j++)
{
int s=j*(i+1);//人的编号的倍数
if(s>100) // 如果大于100 循环打断
break;
arr[s]+=1;
}
}
for(i=0;i<100;i++)
{
int a=arr[i]%2; //判断各个灯被拉的次数的奇偶,奇为亮,偶为灭。
System.out.println(i+1+str[a]);
}
}
public void main(String[] args)
{
new Ower();
}
}