黑马程序员技术交流社区

标题: 循环语句的运用!求助? [打印本页]

作者: 悟中生有    时间: 2013-12-7 11:49
标题: 循环语句的运用!求助?
本帖最后由 悟中生有 于 2013-12-7 12:50 编辑

如题:每3个人一排,结果余下2人;每5个人一排,结果余下3人;每7个人一排,结果也是余下2人。
请问如果人数在0-1000之间,那么,可能有多少人呢?

用哪种循环最佳?  求解!



作者: 几番意难相付    时间: 2013-12-7 11:58
本帖最后由 几番意难相付 于 2013-12-7 12:01 编辑
  1. int person=1000;                                                     //定义人数上限
  2.   for(int x=0;x<person;x++){                                  //循环次数为上限的次数
  3.        if(x%3==2   &&   x%5==3   &&   x%7==2)    //定义循环条件
  4.              System.out.println(x);                                //打印出符合条件的值
  5. }
复制代码

作者: 翼展哈哈    时间: 2013-12-7 12:15
  1. for( int i = 0; 7*i+2<=1000; i++ )
  2.                 {
  3.                         int temp = 7*i+2;
  4.                         if( (temp%3==2)&&(temp%5==3) )
  5.                                 System.out.print(temp+" ");
  6.                         System.out.println();
  7.                 }
复制代码

如果只是加1循环,枚举0~1000之间的所有数值,那样就太慢了!上述代码提供了一种比较快的方法,结果是968。希望能帮到您,也请批评指正,共同进步!
作者: 悟中生有    时间: 2013-12-7 12:21
几番意难相付 发表于 2013-12-7 11:58

多谢指教!
作者: 悟中生有    时间: 2013-12-7 12:22
翼展哈哈 发表于 2013-12-7 12:15
如果只是加1循环,枚举0~1000之间的所有数值,那样就太慢了!上述代码提供了一种比较快的方法,结果是968 ...

多谢指教!共同进步!
作者: 翼展哈哈    时间: 2013-12-7 12:32
悟中生有 发表于 2013-12-7 12:22
多谢指教!共同进步!

我觉得,我提供的代码运行还是比较快的,应该比2楼提供的枚举1~1000 的快一些吧,您觉得呢?我的代码只会从0枚举到142(1000/7),是吧?:handshake
作者: 悟中生有    时间: 2013-12-7 12:51
翼展哈哈 发表于 2013-12-7 12:32
我觉得,我提供的代码运行还是比较快的,应该比2楼提供的枚举1~1000 的快一些吧,您觉得呢?我的代码只会 ...

我运行了一下,结果是一样的?  不知为何?
作者: 大雄9293    时间: 2013-12-7 13:00
class HaXin
{
        public static void main(String[] args)
        {
                int x;
                for(int i = 0;i <= 1000; i++)
                {
                        if((i % 3 == 2) & (i % 5 == 3) & (i % 7 == 2))
                        {
                                System.out.print(i + ",");
                        }
                }
        }
}
作者: 悟中生有    时间: 2013-12-7 13:23
大雄9293 发表于 2013-12-7 13:00
class HaXin
{
        public static void main(String[] args)

变量x没有用到啊?
作者: 翼展哈哈    时间: 2013-12-7 13:32
悟中生有 发表于 2013-12-7 12:51
我运行了一下,结果是一样的?  不知为何?

我说的是一个效率问题,就是程序运行快慢的问题,我的代码和2楼的都能运行出正确结果应该是没有问题的。我只是在说,我的代码应给是快一点儿的。:shutup:
作者: 悟中生有    时间: 2013-12-7 13:46
翼展哈哈 发表于 2013-12-7 13:32
我说的是一个效率问题,就是程序运行快慢的问题,我的代码和2楼的都能运行出正确结果应该是没有问题的。 ...

哦, 是的,多谢指教了:)
作者: 王新年    时间: 2013-12-7 14:41
本帖最后由 王新年 于 2013-12-7 14:42 编辑

既然每3个人一排,结果余下2人,每7个人一排,结果余下2人,那么该数肯定是2或是21的倍数加2,2显然是不对的!所以程序变量i的初始值最低是23可以写成如下代码:这样更节省时间,效果更好!
count=23;
while(true){
    if(count%5==3){
         System.out.println(count);        //打印出所有可能的值
      if(count>1000)
         {  break;}      
    }
    count=count+21;
}

想了好久,才想出求  技术分!





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