黑马程序员技术交流社区

标题: 一道小学生的题,用java解题的问题。 [打印本页]

作者: 吴兆焕    时间: 2012-5-17 14:52
标题: 一道小学生的题,用java解题的问题。
题是这样的:
一群学生,排成5排多3个,排成7排多4个。请问这群学生最少有多少人?

用最简单的java代码解题,代码的写法,还有人数是多少?
作者: 杨康    时间: 2012-5-17 15:00
这是小学生的题吗 我怎么感觉要用3个变量解决 而且还要做判断。
作者: 冯越    时间: 2012-5-17 15:03
本帖最后由 冯越 于 2012-5-17 15:07 编辑

public class Demo {
        public static void main(String[] args) {
                int x = 0;    //其实这个x的初值可以设为15的 因为排5排剩3个 那个说明3个肯定够不成排5排时的一排 那说明这个人数至少是15以上
                while(true) {
                        if(x % 5 == 3 && x % 7 == 4) {
                                
                                break;
                        } else
                                x ++;
                }
                System.out.println("小学生的人数是:" + x);
        }

}
output:小学生的人数是:18
你看可以不?
作者: 吴兆焕    时间: 2012-5-17 15:08
冯越 发表于 2012-5-17 15:03
public class Demo {
        public static void main(String[] args) {
                int x = 0;    / ...

代码,还有没有更简单的方法呀?
作者: 邹颖    时间: 2012-5-17 15:15
用个for循环呗
class  Test
{
        public static void main(String[] args)
        {
                //   用个for循环, 可以先假设 学生人数不超过100人,遍历一次.
                          for (int i=0;i<=100 ;i++ )
                          {
                                  if (i%5==3 && i%7==4)
                                  {
                                          System.out.println(i);
                                  }
                          }



        }
}

作者: 郭宁    时间: 2012-5-17 16:07
  1. public class PTest{
  2.         public static void main(String[] args)
  3.         {
  4.                 int temp =1;//排5排时一排站几个人,不会少于一个吧?
  5.                 while((temp*5-1)%7!=0)  //这个是从   ((temp*5+3)-4) % 7 转化过来的,因为总人数是一定滴,
  6.                 {
  7.                                 temp++;
  8.                 }
  9.                 System.out.println(temp*5+3);
  10.         }
  11. }
复制代码

作者: 郭宁    时间: 2012-5-17 16:14
冯越 发表于 2012-5-17 15:03
public class Demo {
        public static void main(String[] args) {
                int x = 0;    / ...

你从15开始  ~我排五排剩仨,排七排剩一个~ 咋办?
作者: 高云飞    时间: 2012-5-17 16:39
int countOfStu = 0;
while (countOfStu <= 1000) {
        if (countOfStu % 5 == 3 && countOfStu % 7 == 4) {
                System.out.println(countOfStu);
        }
        countOfStu++;
}
1000以内的都可以满足了。
作者: 冯越    时间: 2012-5-17 16:46
郭宁 发表于 2012-5-17 16:14
你从15开始  ~我排五排剩仨,排七排剩一个~ 咋办?

这要看你怎么理解问题了,你要是把多那3个理解为不足以排成和前面一排一样的人数那自然就是我那种写法。你要是理解为前面的排数人为死规定的 比如说只能排5排  那自然是你那种写法
作者: 孙峰    时间: 2012-5-17 17:42
刚准备写,有事出去了,回来一看都这么多回答了,那我就写下自己的思路吧。x=5a+3,y=7b+4,  a ,b分别从1到100吧(应该够大了),得到的结果赋值给两个数组:arr1  ,arr2.     然后两数组里元素比较。第一个一样的应该就是最少人数了。
作者: 郭宁    时间: 2012-5-17 17:52
我写的 也还凑合额~~  为啥木有技术分哩~~~~~{:soso_e149:}
作者: suiabing    时间: 2012-5-17 18:47
本帖最后由 隋丙跃 于 2012-5-17 18:49 编辑

public static int getStudentNumber() {
                for(int i = 1,num=0 ; ;i++){
                        if((num=5*i+3)%7-4==0)
                                return num;                        
                }
        }


最简单的方法,执行次数也是最少的计数器不用从1开始算 直接从5的倍数+3算起

作者: 黄秋    时间: 2012-5-17 22:02
设每排n人,总人数是 5*n+3,排成7排多4个 --> (总人数-4)%7=0:
  1. class Test {
  2.         public static void main(String[] args) {
  3.                 //设每排n人
  4.                 int n;
  5.                 for(n=1; ;n++) {
  6.                         if((5*n+3-4)%7==0)
  7.                                 break;
  8.                 }
  9.                 System.out.println(5*n+3);
  10.         }
  11. }
复制代码

作者: 黄秋    时间: 2012-5-17 22:03
本帖最后由 黄秋 于 2012-5-17 22:59 编辑

重复提交了,干脆将其改为 while 循环:

设每排n人,总人数是 5*n+3,排成7排多4个 --> (总人数-4)%7=0:
  1. class Test {
  2.         public static void main(String[] args) {
  3.                 //设每排n人,总人数m人
  4.                 int n=1,m=5*n+3;               
  5.                 while((m-4)%7!=0){
  6.                         n++;
  7.                         m=5*n+3;
  8.                 }
  9.                 System.out.println(m);               
  10.         }
  11. }
复制代码

作者: qq3356441    时间: 2012-5-17 23:14
public class ar{
      
         public static void main(String[] args)
        {
                         int y=0;
   //   用个for循环, 人数是算不准的,结果有N个,比如人数在1千以内,那么就有29个结果符合
     
               for (int i=5;i<1000;i++ )
                  {
                     if (i%5==3 && i%7==4)
                  {
                           System.out.print("人数"+i+","+"\t");
                                                            y++;
                       }
                       }
                                        System.out.println();
                                        System.out.println("结果个数"+y);

        }
}
作者: 胡团乐    时间: 2012-5-17 23:33
public class CountStu {

        public static void main(String[] args) {
                //学生人数肯定大于4 因为3,4都不够一排
                System.out.println("学生人数可能为:");
                int num=5;
                while(num<1000){
                        if(num%5==3 && num%7==4)
                                System.out.println(num);
                        num++;
                }
               
        }
}
学生人数可能为:
18
53
88
123
158
193
228
263
298
333
368
403
438
473
508
543
578
613
648
683
718
753
788
823
858
893
928
963
998




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