第一题。。
a,b两变量(应该是数值吧)
a=a+b;b=a-b;a=a-b;交换成功
第2题看不懂。。各人拉自己的不是全灭么?

解决方案 »

  1.   

    第一题解法如chcomic(痛苦的猪)所示;
    第二题:显然某一盏灯(编号K)被拉的次数等于K对小于或等于K的数取模为零的个数。如果被拉次数为偶数则这盏灯是亮的。解法如下(结果为9900):
    public class Ligh{
        public static void main(String[] agrs){
            int isLighNum = 0;
            for(int i = 1; i <=10000; i++){
                if(Untitled5.isLigh(i)){
                    isLighNum++;
                }
            }
            System.out.println(isLighNum);
        }    private static boolean isLigh(int lighNumber){
            int drawNum = 0;
            for(int i = 1; i <= lighNumber; i++){
                if(lighNumber % i == 0){
                    drawNum++;
                }
            }
            if(drawNum % 2 != 0){
                return false;
            }
            return true;
        }
    }
      

  2.   

    有10000人,要经过一条道,道上有标了号码从1到10000的灯,全开的,要求每个人经过灯时将灯号码是自己序号的倍数灯拉一下,即取反,开的要关,关的要打开,问最后有多少亮的?你的意思是第一个人的序号是1,则把每个灯都拉一次,即全关,第二个人序号是2,则把偶数灯全开,以后依此类推,是不是这个意思,如果是这样,那答案是9900个灯全开,我不知道有没有巧妙的办法,我是用程序做的public class testlight 
    { public static void main(String args[])
    {
    thelight alight=new thelight();
    alight.onandoff();

    }
          
    } class thelight{ int a[];
       int i,j,result;
       public void  onandoff()
       {  
          a=new int[10000];
          for(i=0;i<10000;i++)
          {
              a[i]=1;
          }
          for(i=1;i<=10000;i++)
          {
              for(j=i;j<=10000;j++)
              {
                  if(j%i==0)
                  {
                      if(a[j-1]==1)
                         a[j-1]=0;
                      else
                         a[j-1]=1;           
                  }
              }
          }
          result=0;
          for(i=0;i<10000;i++)
          {
              result+=a[i];
          }
          System.out.println(result);
       }
    }
      

  3.   

    to roundside(世道轮回) 
     小弟刚学java不久,问一个菜鸟问题
      Untitled5是啥,是Ligh的一个对象吗?
      

  4.   

    第一题也可这么做:
    swap(a,b)
    {
       xor a,b
       xor b,a
       xor a,b
    }
      

  5.   

    写错了,Untitled5应该改成Ligh。
      

  6.   

    巧解:某盏灯(编号为K)被拉的次数为K的因数个数加2(即1和K);而因数都是成对出现的(即K = a * b),显然,只有当a = b 时因数个数才可能为奇数;由此可推出被拉次数为奇数的灯(灭)个数为n(n * n <= 10000并且n为其中的最大整数),即n = 100;因此结果为:10000 - 100 = 9900
      

  7.   

    gamblerliu,可能是我直觉吧,别见怪。
    首先我个人觉得面向对象最基本的要求是建模必须符合现实,特别是人们求解某个问题的一般步骤,然后按着这些步骤一步一步分解问题,直至得到答案。比如这里的第二题,显然最基本的步骤应该是从头到尾一个灯一个灯的判断其是否是亮的,然后将是亮的灯的个数加起来,得到最后的结果。至于如何判断灯是否是亮的这类问题则应该是问题分解细化(也就是放到某个方法中处理)。
    另外,你的数组长度很长。:)欢迎你的mail讨论。
      

  8.   

    1. 用把两个变量加上特别的分隔符连成字符串放到变量1中,再截取变量1的部分给变量2,再把变量1中的分隔符去掉即完成交换。这样无论是数值型还是字符型变量都可以实现交换了。2. roundside(世道轮回)的方法很巧妙了。