黑马程序员技术交流社区

标题: 程序不懂 [打印本页]

作者: vipzh    时间: 2012-12-5 16:25
标题: 程序不懂
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
public class num1 {
     public static void main(String args[]){
         for(int i=1;i<=4;i++)
         for(int j=1;j<=4;j++)
        for(int k=1;k<=4;k++)
            if(i!=j&&i!=k&&k!=j)
          System.out.println(“”+i+j+k);
      }
}
这代码 为什么要用三层循环,每层循环都有什么用?

作者: 坚持远方    时间: 2012-12-5 16:39
你不是要组合三位数吗?所以就要用三层嵌套,第一层确定百位数,第二层确定十位数,第三层确定个位数
作者: 黄嵘才    时间: 2012-12-5 17:25
我顺着原作的代码去想原作的想法,看看这样子能自己理解吗?
  1. /*
  2. * 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  3. * 可用的元素为4个{1,2,3,4},从中取出3个用来组成一个数。
  4. *
  5. *
  6. */
  7. public class num1 {
  8.      public static void main(String args[]){
  9.          for(int i=1;i<=4;i++)//百位:4选1
  10.          for(int j=1;j<=4;j++)//十位:4选1
  11.         for(int k=1;k<=4;k++)//个位:4选1
  12.             if(i!=j&&i!=k&&k!=j)//选出百十个位后,做逻辑:三个数不重复(百位!=十位&&....)
  13.           System.out.println(""+i+j+k);//输出三个数(百十个)
  14.       }
复制代码

作者: 乔叶旭    时间: 2012-12-5 20:06
public class num1 {
     public static void main(String args[]){
         for(int i=1;i<=4;i++)
         for(int j=1;j<=4;j++)
        for(int k=1;k<=4;k++)
            if(i!=j&&i!=k&&k!=j)
          System.out.println(“”+i+j+k);
      }
}

它的思想是:个位,十位,百位,三个位置的数各自从1到4循环一遍,为的就是让这三个位置遍历1到4,你看到最后的输出语句了吗?输出的结果就是 ijk ,i 就是百位了,j就是十位了,k就是个位了,if 语句是为了满足没有重复这个条件设置的,三层for循环 是这样的,k 做为最里面的循环 是个位数,遍历1 到4 ,j 是十位数,十位数的每个数都要让自己的个位从 1 到 4 遍历一遍,这样才能使所有的数都包含在范围内,同样的,i 是百位,每一个 i 都要让自己的十位从 1 到 4 遍历一遍,这样就有了,i 是最外层的循环,k 是最内层的循环,因为是个十百 三个位置,所以每个位置都要遍历一遍,这样就有了三层循环。
作者: 胡高德    时间: 2012-12-5 21:36
public class num1 {
      public static void main(String args[]){
          for(int i=1;i<=4;i++)//百位数字从1到4中选择其中一个数
          for(int j=1;j<=4;j++)//十位位数字从1到4中选择其中一个数
         for(int k=1;k<=4;k++)//个位数字从1到4中选择其中一个数
             if(i!=j&&i!=k&&k!=j)//三位数中的每一位都不相同
           System.out.println(“”+i+j+k);//遍历完以后输出这个个位、十位、百位都不相同的数。
       }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2