黑马程序员技术交流社区

标题: (已结束)答题活动,时间有限,速来 [打印本页]

作者: 神之梦    时间: 2013-8-6 21:11
标题: (已结束)答题活动,时间有限,速来
本帖最后由 神之梦 于 2013-8-10 00:55 编辑

说明:
      此次活动时间同样不会超过三天,先到先得。



                                          
                                              此次活动结束,好像没多少人来答题
                                这么简单的题目都没几个人来答
                                  但却很多人在说技术分难得
                                           无语中!!!
            

题目:
      宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,那么与会人士有多少?(用程序体现)

要求:
      1、题目须自己做出,有问题请及时联系楼主。
       2、直接在本帖回复,代码放在代码块中。
       3、代码要有适当注释,无注释无分。
       4、由于题目不难,先做出来且结果正确的前10位2分,后来者且结果正确的1分(这就是先到先得哦)。















作者: 施大勇    时间: 2013-8-6 21:16
抢分来啦
作者: yangchao313    时间: 2013-8-6 21:19
沙发  哈哈  
作者: 夜写意    时间: 2013-8-6 21:27
本帖最后由 夜写意 于 2013-8-6 22:22 编辑

看题,虽然不一定会做。答案:
  1. /*
  2. * 设计思路:每有一个人到场都会和已经在会场的人握手,此时,该与会者握手次数就是在他之前已经到会场的人数,也就算总人数减1。
  3. * */
  4. public class Test
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 int sum=0;
  9.                 int person;
  10.                 for(person = 1;sum<1225;person++ )
  11.                 {
  12.                         sum = sum+person-1;
  13.                 }
  14.                 System.out.println("与会总人数为:"+(person-1));//由于在sum==1225的时候,person执行了person++,所以要减掉1.
  15.         }
  16.         
  17. }
复制代码

作者: 牛海亮    时间: 2013-8-6 21:30
开始做题~
作者: 陈春    时间: 2013-8-6 21:30
过来看看。。。。
作者: sergio    时间: 2013-8-6 21:33
看看怎样的题目
作者: 施大勇    时间: 2013-8-6 21:45
楼主握手的次数好像不以哦,是不是次数给错啦
作者: 天下    时间: 2013-8-6 21:52
go     go........
作者: 王楚鑫    时间: 2013-8-6 21:53
{:soso_e133:}我就是偷偷看看题目我会不会
作者: 牛海亮    时间: 2013-8-6 21:55
本帖最后由 牛海亮 于 2013-8-6 22:00 编辑
  1. ublic class ShakeHands {

  2.         /**
  3.          * 宴会上一共有1225次握手,设每一位参加宴会的人对其他
  4.          * 与会人士都有一样的礼节,那么与会人士有多少?
  5.          * 分析:2个人的话,从A看来,握手一次,从B看来,握手一次,2*1
  6.          * 3个人的话,对每个人来说均握手两次3*2
  7.          * 4个人的话对每个人来说均握手三次 4*3
  8.          * 五个人  5*4
  9.          * 但A和B握手和B和A握手 重复计算了一次,所以该再除以2,即得握手的总次数
  10.          * @param args
  11.          */
  12.         public static void main(String[] args) {
  13.                 // TODO Auto-generated method stub
  14.                 int i = 2;//握手至少得两个人
  15.                 while(true)
  16.                 {
  17.                         
  18.                         int sum = i*(i-1); //计算当人数为i时握手的总次数的两倍
  19.                         if(sum == 2450)//和总握手次数的两倍比较,相等时即得与会的人数,输出返回即可
  20.                         {
  21.                                 System.out.println("与会人士共有"+i+"个");
  22.                                 break;
  23.                         }
  24.                         i++;//如果握手的次数的两倍未达到总握手次数的两倍,再添加一个人,如此循环下去,直到握手的次数的两倍达到2450.
  25.                 }
  26.                         

  27.         }

  28. }
复制代码

作者: panda@uu90    时间: 2013-8-6 22:03
我想看题,谢谢
作者: 施大勇    时间: 2013-8-6 22:05
/*
如果有3个人,则第一个人可以和那两个人握手,第二个人也可和两个人握手,
第三个人也可和前两个人握手,即第个人都与其它人握手,因此是(n-1)*n=握手次数/2
*/
public class Test
{
public static void main(String args[]){
  int ren=getRen(1225);
  System.out.println("人数为:"+ren);
}
public static int getRen( int c){
  int sum=c*2;
  int i=1;
  while(true){
   if (sum==(i-1)*i)
   {
    break;
   }
   i++;
  }
  return i;
}
}

作者: hmYing    时间: 2013-8-6 22:07
为了爱好,为了提升
作者: hmYing    时间: 2013-8-6 22:36
import java.text.DecimalFormat;

/**
* 宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,那么与会人士有多少?
* @author userZyn
*/
public class Count {

        public static void main(String[] args) {
                /**
                 * 假设有n人与会,1225 = n*(n+1)/2
                 * n*(n+1) = 1225*2
                 * n*n + n - 2450 = 0
                 * n = (-1 + (1*1 + 4*2450)开方)/(2*1)
                 */
                int derta = 1*1+4*1225*2;
                double personNumber = java.lang.StrictMath.pow(derta, 1.0/2);
                DecimalFormat bd = new DecimalFormat("########");//将double类型的数据进行四舍五入       
                System.out.print(bd.format(personNumber));               
        }
}

作者: 浪无痕-陈文坤    时间: 2013-8-6 22:42
看看,顶顶顶
作者: smart2586    时间: 2013-8-6 22:45
什么东东
作者: jrry    时间: 2013-8-6 22:48
看看题目。
作者: hmYing    时间: 2013-8-6 22:53
import java.text.DecimalFormat;
/**
* 宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,那么与会人士有多少?
* @author userZyn
*/
public class Count {

         public static void main(String[] args) {
                 /**
                  * 假设有n人与会,1225 = n*(n+1)/2
                  * n*(n+1) = 1225*2
                  * n*n + n - 2450 = 0
                  * n = (-1 + (1*1 + 4*2450)开方)/(2*1)
                  */
                 int derta = 1*1+4*1225*2;
                 double dertaKai = java.lang.StrictMath.pow(derta, 1.0/2);
                 DecimalFormat bd = new DecimalFormat("########");//将double类型的数据进行四舍五入        
           int personNum = Integer.parseInt(bd.format(dertakai)); //将字符串转换成int
                 int result = (-1 + personNum)/2;
                 System.out.println("与会人数为:"+ result);
         }
}
作者: hmYing    时间: 2013-8-6 22:54
计算机不给力,我都无语了... ...
作者: 浪无痕-陈文坤    时间: 2013-8-6 23:07
本帖最后由 浪无痕-陈文坤 于 2013-8-6 23:11 编辑

50人.
如果只有1个人0次握手(1:0)=1;(2:1)=3;3个人(3:3)=6;4个(4:6)=10;5个(5:10)=15;那么 可以看出人数+次数=下一次的次数;设x=num-1就有x*(x+1)除以2=1225得出x=49;再进行加num=49+1=50;呵呵
作者: lijia113    时间: 2013-8-6 23:11
我来看看。哈哈
作者: panda@uu90    时间: 2013-8-6 23:18
本帖最后由 panda@uu90 于 2013-8-6 23:23 编辑

思路:1:我是刚学习的,现在看视屏只看到了排序,感觉和此题有些接近,比如定义头标和尾标,取中间值,其实角标相当于人数,次数是角标里面所代表的内容。
     2:如果把会场总人数设为x,可以这样:假如是会场是5人,握手次数,4,3,2,1,看着这个数字是不是感觉很高兴,因为首尾相加,正好等于人数,而且是2个5,所以可以总结:握手次数=(x-1)/2*x的规律。5-1=4,4/2=2.
   3:所以举例从45角标开始,45人握手次数为:990,55人握手次数为:1485,1225>990,1225<1485,所以:x>45,x<55,于是取中间值。50人再试一下,结果正好是握手1225次。
   4:此题只让我想到【选择排序】:
   0-1 0-2 0-3 0-4 0-5
   1-2 1-3 1-4 1-5
   2-3 2-4 2-5
   3-4 3-5
   4-5
但是具体用代码表示,我还真有点不会,我发表,只是想让高人提点。另外补充代码。谢谢
作者: 肥猫    时间: 2013-8-6 23:21
本帖最后由 肥猫 于 2013-8-7 00:51 编辑

一头大菜猫来打酱油了.
  1. /**
  2. *
  3. * @author FatCat
  4. *
  5. */
  6. public class FatCat {

  7.         public static void main(String[] args) {
  8.                 int n =1;//N存储人数
  9.                 int sum=0;//SUM存储握手次数
  10.                 while(true){//其实就是N-1的等差数列
  11.                         if(sum==1225)//
  12.                                 break;
  13.                         sum+=n;//不倒序,直接正序加
  14.                         n++;
  15.                 }
  16.                 System.out.println(n);//输出人数
  17.         }
  18. }
复制代码

作者: 黄兴旺    时间: 2013-8-6 23:31
先看看题目吧...
作者: 黑马王晓明    时间: 2013-8-6 23:39
:)                        
作者: jrry    时间: 2013-8-7 00:07
  1. /**
  2.         需求: 宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,计算与会人数

  3.         思路:假定参加宴会有x人,我们把这些人排成一个次序,从第1个人,第2个人...到第x个人,那么我们可知,第1个人需要与其余x-1个人握手,
  4.                   第2个人与其余x-2个人握手,第3个人再与其余x-3个人握手....第x-1个人与最后1个人握手,第x个人已经与所有人都握了手,不需要再握,
  5.                   反过来,这样我们把每一个人的握手次数,从第x个人开始 0 + 1 + 2 + 3 + ... + x-2 + x - 1,加起来既为1225次,然后我们可以发现计算
  6.                   方法即为循环相加从0到x-1直到总和为握手总次数1225,相加x次,x为与会人数       
  7.                  
  8. */
  9. public class CountNum
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                
  14.                 System.out.println(getPeopleAmount(1225));
  15.         }
  16.         /**
  17.         计算与会人数
  18.          num:握手次数
  19.         */
  20.         public static int getPeopleAmount(int num)
  21.         {       
  22.                 //定义局部变量与会人数amount,并初始化为0
  23.                 int amount = 0;
  24.                 //定义局部变量握手总数sum,并初始化为0
  25.                 int sum = 0;
  26.                 //当sum小于传入的握手次数时,一直执行循环,sum等于握手次数时无需再循环
  27.                 while (sum < num)
  28.                 {
  29.                         //从0开始相加
  30.                         sum = sum + amount;
  31.                         //没执行一次相加,人数+1
  32.                         amount ++;
  33.                 }
  34.                 return amount;
  35.         }
  36. }
复制代码

作者: lijia113    时间: 2013-8-7 00:07
  1. public class HandsDemo {
  2. public static void main(String[] args){
  3. //定义握手的次数
  4. int count=1225;
  5. /**
  6. * 设握X次手每个人除去自己外、都跟每个人握一次手 所以每个人握(x-1)次
  7. * 有x人就是 x*(x-1)
  8. * 但是这样每个人就会重复一次所以除以2就是 x*(x-1)/2算出来就能得到人数.
  9. * */
  10. int x=0;
  11. int sum=0;//设定每次有人进入是的握手次数,开始时为0
  12. while(sum<count){//当握手次数sum=count时,退出循环

  13. sum=(x*(x-1))/2;
  14. x++;
  15. }
  16. System.out.println("参加与会的人数是:"+x);
  17. }
  18. }
复制代码
结果是:参加与会的人员是:51

作者: 浪无痕-陈文坤    时间: 2013-8-7 00:16
浪无痕-陈文坤 发表于 2013-8-6 23:07
50人.
如果只有1个人0次握手(1:0)=1;(2:1)=3;3个人(3:3)=6;4个(4:6)=10;5个(5:10)=15;那么  ...

sorry,今早再写,可以吗,刚入门不久,呵呵
作者: 黄兴旺    时间: 2013-8-7 00:45
  1. /*
  2. 假设有n人,那么每人要握的小手就是(n-1)次,
  3. 所以握小手次数为n(n-1)/2次。为什么要除2呢?
  4. 是因为甲如果和乙握手和乙和甲握手是一样的..
  5. 那么就可以算出n来:n(n-1)-2450=0;
  6. */

  7. class woshou
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 double n = (1+ Math.sqrt(1+4*2450))/2;
  12.                 System.out.println("那么与会人士有"+n+"人。");               
  13.         }
  14. }
复制代码
{:soso_e121:}
作者: 浪无痕-陈文坤    时间: 2013-8-7 01:06
本帖最后由 浪无痕-陈文坤 于 2013-8-7 01:11 编辑

public class Hello
{

         public static void main(String[] args)
         {
                System.out.println(num(1225));

         }
         //传入握手次数
         public static int num(int i)
          {
             //人数定义
              int sum = 1;
                //因为人数未知只能通过握手次数进行,所以第二项为空
         loop:for(int x = 1; ; x++)
              {               
                  //通过1人,2人.....递加进行计算握手次数
                  for(int y = 1; y < x ; y++)
                  {//需要判断没握手的情况(0或1),这里就用1;
                      if(i==0)
                         break loop;
                      //握一次总次数减1
                        else if(--i == 0)
                            break loop;
                        else
                            continue;
                  }
                  //一次循环人数加1
               if(i !=0)                sum++;
              }
              return sum;
          }
        
}
版主:解决了,随便输入满足条件(比如10,15)的都可以。手下留情,新手呀(虽然不是很好的理由,但现在急用技术分)谢谢!!

作者: 牛牛    时间: 2013-8-7 09:26
出新题了呀~我来了。
作者: 牛牛    时间: 2013-8-7 10:09


/**
* 题目:
       宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,那么与会人士有多少?(用程序体现)

       要求:
   1、题目须自己做出,有问题请及时联系楼主。
   2、直接在本帖回复,代码放在代码块中。
   3、代码要有适当注释,无注释无分。
   4、由于题目不难,先做出来且结果正确的前10位2分,后来者且结果正确的1分(这就是先到先得哦)。
* 思路:1.设有n人
*   2.每2个人都会握手一次
*      3.假设有3个人,1,2,3 。12握手13握手 23握手。共3次握手。。。 2+1=3   4个人时:3+2+1=6;
*/
public class Exercise_4 {

public static void main(String[] args) {
  test1();
}
/**
  * 方案1
  */
public static void test1(){
  int peopleNum = 0;//人数;
  int woshouCount = 1225;//握手次数
  int curWoshouCount = 0;//当前握手次数
  for (int i = 1;true; i++) {
   curWoshouCount = curWoshouCount+i;
   if(curWoshouCount==woshouCount){
    peopleNum = i+1;
    System.out.println("答那么与会人士有"+peopleNum+"人。");
    break;
   }
  }
}


}


作者: lvjayj    时间: 2013-8-7 10:19
答题喽,题目快来
作者: 刘利民    时间: 2013-8-7 10:30
先看看,。:)
作者: 乔小北    时间: 2013-8-7 10:44
我也来参加一下
作者: lvjayj    时间: 2013-8-7 10:59
  1. for(int i = 1;i <=100; i++)//循环
  2. {
  3.    
  4.     if(i*(i-1)/2 == 1225) //判断等式是否成立,如果成立那么i就是参加宴会的人数
  5.     {
  6.       System.out.println(i);//输出结果
  7.       break;//跳出循环
  8.     }
  9. }
复制代码

作者: 乔小北    时间: 2013-8-7 11:00
本帖最后由 乔小北 于 2013-8-7 11:09 编辑
  1. package com.itheima.enhance;

  2. public class Hands {

  3.         public static void main(String[] args) {
  4.         
  5.                 int sum=0;  //握手次数
  6.                 int i=0;  //人数
  7.                 for(i=1;sum<1225;i++)  
  8.                         sum+=(i-1);       // 当sum等于1225时,跳出循环
  9.                 System.out.println("握手次数:"+sum);
  10.                 System.out.println("到场人数:"+(i-1));
  11.         }
  12. }
复制代码
运行结果:
握手次数:1225
到场人数:50
作者: xscn    时间: 2013-8-7 11:03
看题目。。。。
作者: 张俊生    时间: 2013-8-7 11:14
我也回复
作者: xscn    时间: 2013-8-7 11:38
  1. class WoShou
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.              int count=0;//定义握手计数器
  6.              for(int i =1;i<1225;i++){//定义循环人数,握手时双向的,a和b握手等同于b和a握手,i=1个人握手0次,i=2个人握手1次,i=3个人握手3次类推出count+i-1次
  7.                
  8.              count=count+i-1;
  9.              if(count==1225){//判断握手达1225次后break
  10.              System.out.println("参加宴会的人数为"+i);
  11.              break;}
  12.                 }
  13.         }
  14. }
  15. ---------- java ----------
  16. 参加宴会的人数为50

  17. 输出完成 (耗时 0 秒) - 正常终止
复制代码

作者: 黄文伯    时间: 2013-8-7 11:53
{:soso_e179:}
作者: EYE_SEE_YOU    时间: 2013-8-7 12:33
答题时间3小时是什么意思啊
作者: 肥猪    时间: 2013-8-7 12:34
我来了~
作者: 小时晚er    时间: 2013-8-7 13:22
瞅瞅。。。。。。。。
作者: 肥猪    时间: 2013-8-7 13:28
  1. /*
  2. * 宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,那么与会人士有多少?(用程序体现)
  3. */
  4. public class Hands {
  5.         public static void main(String[] args)
  6.         {
  7.                 for(int person=2;;person++ ) //建立一个循环用来人数的增加,直至满足条件,跳出循环
  8.                 {
  9.                         int count = 0; //用来统计握手的次数
  10.                         for(int x=person;x>0;--x) //握手的次数=人数-1+人数-2……………………1;
  11.                         {
  12.                                 count = count + x;
  13.                                
  14.                         }
  15.                         if(count == 1225) //如果握手次数为1225次
  16.                         {
  17.                                 System.out.println("此次宴会的人数为:"+(person+1)+"人"); //打印人数,因为内部循环是先减后用所以此处打印人数需要+1
  18.                                 break;//跳出循环
  19.                         }
  20.                         /*
  21.                          * 打印结果为50人
  22.                          */
  23.                 }
  24.         }
  25. }

复制代码

作者: EYE_SEE_YOU    时间: 2013-8-7 13:31
本帖最后由 EYE_SEE_YOU 于 2013-8-7 13:59 编辑

class 握手1225次求人数        
{
        public static void main(String[]args)
        {
        int x=2;
        for(int y=0;y<1225;x++)
                {
                y=y+x-1;
                }
        System.out.println("握手1225次时的总人数是:"+x-1+"人");
        }
}
自己想的,没有验证过,不知道对不对这个因为标点符号中英文没转换好,cmd里报错了一下

作者: EYE_SEE_YOU    时间: 2013-8-7 13:59
本帖最后由 EYE_SEE_YOU 于 2013-8-8 07:22 编辑

public class haha        
{
        public static void main(String[]args)
        {
        int x=2;
        for(int y=0;y<1225;x++)
                {
                y=y+x-1;
                }
        System.out.println("握手1225次时的总人数是:"+(x-1)+"人");
        }
}
输出   握手1225次时的总人数是17人偶尔重编太快了没仔细查就会出小差错

作者: chslzj    时间: 2013-8-7 15:23
本帖最后由 chslzj 于 2013-8-7 15:34 编辑

听说贼简单
  1. <div class="blockcode"><blockquote>public class Test{
  2. public static void main(String[] args){
  3. /**
  4. * 第n位来的客人需要与前面的人都要握手,握n-1次,当握手次数达到1225,或者更多时,程序就结束了。更多时,说明这种情况不可能出现
  5. */
  6.                 int sum=0;
  7.                 int i=0;
  8.                 for(i=1;sum<1225;i++)
  9.                         sum+=(i-1);
  10.                 //多加了一,减掉
  11.                 i--;
  12.                 if(sum>1225)
  13.                         System.out.println("没有找到合适人数");
  14.                 else{
  15.                         System.out.println("宴会人数为"+i+"人");
  16.                 }
  17. }
  18. }
复制代码

作者: kangxiaoning    时间: 2013-8-7 15:32
看看什么样子的,先顶一个
作者: lengmianluocha    时间: 2013-8-7 16:54
本帖最后由 lengmianluocha 于 2013-8-7 17:33 编辑
  1. public class shakehands {
  2.         /**
  3.          * 由分析可知:若有x人,则握手的次数:(x-1)*x/2
  4.          * <p style="line-height: 30px; text-indent: 2em;"></p>  */
  5.         public static void main(String[] args) {
  6.                 int num = 1;
  7.                 do {
  8.                         num++;
  9.                 }
  10.                 while (!((num - 1) * num / 2 == 1225));//使用do while 循环算出与会人数。
  11.                 System.out.println("共有: " + num + "人");
  12.         }

  13. }
复制代码

作者: 封号了...    时间: 2013-8-7 17:16
求题,上分
作者: 封号了...    时间: 2013-8-7 17:29
public static void main(String[] args) {
                int number = 1225;
                int peoplenum = test(number);
                if (peoplenum == 0) {
                        System.out.println("答案不存在");
                }else {
                        System.out.println("人数为"+peoplenum);
                }
        }

        private static int test(int number) {
                // TODO Auto-generated method stub
                //握手总数计为total
                int total = 0;
                for (int i = 1; i < number; i++) {
                        total += i;
                        //如果当前握手总数正好跟题目提供的握手总数相等则返回当前握手的人数
                        if (total == number) {
                                return i+1;
                        }
                }
                //如果没能找到与题目所匹配的握手总数,则返回0
                return 0;
        }
作者: 木偶_freedom    时间: 2013-8-7 21:29
先看看~~~~~~~~
作者: 木偶_freedom    时间: 2013-8-7 21:47
本帖最后由 木偶_freedom 于 2013-8-7 21:48 编辑
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {               
  5.                 for(int i=2; i<1225; i++) //利用穷举法
  6.                 {
  7.                         if((i*(i-1))/2==1225) //利用逻辑抽取出其规律 易得每个人共握手 n-1 次,而A与B握手也相当于B与A握手 易得还要除以二
  8.                         {
  9.                                 System.out.println("则参加聚会的人有" + i + "个。"); //打印聚会人数
  10.                                 break;
  11.                         }
  12.                 }
  13.         }
  14. }
复制代码

作者: lvjayj    时间: 2013-8-7 22:16
  1. public class test {
  2.            public static void main(String[] args)
  3.            {
  4.                    for(int i = 1;i <=100; i++)//循环
  5.                   {
  6.                           if(i*(i-1)/2 == 1225) //判断等式是否成立,如果成立那么i就是参加宴会的人数
  7.                   {
  8.                   System.out.println(i);//输出结果
  9.                   break;//跳出循环
  10.             }
  11. }
复制代码
输出:50

作者: lvjayj    时间: 2013-8-7 22:30
要养成良好的编码习惯。嘿嘿,记住了,我还以为会再加次分~{:soso_e120:}
作者: 浪无痕-陈文坤    时间: 2013-8-7 23:22
版主,谢谢了!努力进行中!!顶顶顶
作者: lijia113    时间: 2013-8-7 23:22
lijia113 发表于 2013-8-7 00:07
结果是:参加与会的人员是:51

难道是50?我哪里算错呢?
作者: 黄兴旺    时间: 2013-8-8 00:10
黄兴旺 发表于 2013-8-7 00:45

主啊  教教我怎样去除吧...
作者: 白堇翎    时间: 2013-8-8 00:13
看看题目
:o本贴由隐藏贴回复机快速回复
作者: 白堇翎    时间: 2013-8-8 00:37
本帖最后由 白堇翎 于 2013-8-8 00:40 编辑
  1. package day16;
  2. /*
  3. * 需求:
  4. *                        
  5. *                                 宴会上一共有1225次握手,设每一位参加宴会的人对其他与会人士都有一样的礼节,那么与会人士有多少?(用程序体现)
  6. * 分析:
  7. *                        
  8. *                                 1.每一位参加宴会的人都与其他的人握手,就是说第1个人需要与0个人握手,第2个人需要与1个人握手,第3个人需要与2个人握手
  9. *                                 2.可以延伸出实际上第X个人实际上握了X-1次手,那么我只需要再定义一个变量来记录总握手次数,就可以获得具体人数了.
  10. *                                 3.可以设计一个类,用于专门解决此类问题
  11. *
  12. * 步骤
  13. *                                 1.新建一个类,新建一个方法.
  14. *                                 2.此方法需要传入一个值,那就是一共握了多少次手
  15. *                                         2.1需要定义一个计数器用来记录握手的人数
  16. *                                         2.2 需要定义一个计数器用于记录握手的总次数
  17. *                                 3.在方法内部通过while死循环来计算,直到2号计数器的值等于传入的数字的值,此时打印计数器并且跳出循环
  18. *
  19. */
  20. public class actTest {
  21.         public static void main(String[] args) {
  22.                 Party party = new Party();
  23.                 party.getNum(1224);
  24.         }
  25. }
  26. class Party{
  27.         public void getNum(int num){
  28.                 int pos = 1;//计数器1号,用于记录参加宴会人数
  29.                 int sum = 0;//计数器2号,用于记录握手次数
  30.                 while(true){
  31.                         if(pos>num){//茁壮性判断
  32.                                 System.out.println("握手次数有误,请重新输入");
  33.                                 break;
  34.                         }
  35.                         if(sum == num){
  36.                                 System.out.println("共有"+pos+"人参加宴会");
  37.                                 break;
  38.                         }
  39.                         sum = sum+pos-1;//因为第一个人没有握手,所以此处需要减一
  40.                         pos++;//人数增加1
  41.                 }
  42.         }
  43. }
复制代码

作者: penpen    时间: 2013-8-8 00:47
为啥我总是后知后觉的。。。。
作者: 大漠月影    时间: 2013-8-8 14:18
参与   
作者: 傻瓜一点红    时间: 2013-8-8 14:31
look,看是否有时间弄:)
作者: 李江    时间: 2013-8-8 15:04
:D我来看看哈
作者: 李江    时间: 2013-8-8 16:18
  1. /*
  2. 思路分析:
  3. 假设有n个人编号为 0 1 2 3 ... n-1;
  4. 0 握手 n-1
  5. 1 握手 n-2
  6. .
  7. .
  8. .
  9. n-1 握手 n-n=0

  10. 步骤:
  11. 设置大小为n的数组
  12. arr[j]表示编号为j的人主动与其他人握手的次数
  13. 为每一个数组赋值
  14. 计算总的握手次数,满足条件结束循环

  15. 总共n(n-1)/2


  16. */
  17. class TestDemo
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 for (int n =1; ;n++ ) //假设有n个人,设置一个大小为n的数组
  22.                 {
  23.                         int[] arr = new int[n];
  24.                         for (int j=0;j<n ;j++ )//编号为j的人与n-j-1个人握手
  25.                         {
  26.                                 arr[j] = n-j-1;
  27.                         }
  28.                         int sum = 0;
  29.                         for (int j=0;j<arr.length ;j++ )//计算总共握手次数
  30.                         {
  31.                                 sum=sum+arr[j];
  32.                         }
  33.                         if(sum==1225)//如果握手次数==1225结束循环
  34.                         {
  35.                                 System.out.println(n);
  36.                                 break;
  37.                         }
  38.                                
  39.                 }
  40.         }               
  41. }

  42. /*
  43.                 int sum = 0;
  44.                 int i;
  45.                 for (i=1;  ;i++ )
  46.                 {
  47.                         sum = i*(i-1)/2;
  48.                         if(sum==1225)
  49.                                 break;
  50.        
  51.                 }
  52.                 System.out.println(i);*/
复制代码

作者: 刘张朋    时间: 2013-8-8 18:36
眼看时间快到了,抓紧
作者: 刘张朋    时间: 2013-8-8 19:19
  1. public class Test {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // 我的思路是:先假设有0个人,然后每到来一个人他都要与前面到来的人握手,所以当第x个人来的时候,
  7.                 //他要与前面的x-1个人握手,那么总的剩下的握手次数要减去x-1次;当握手次数为0的时候,表示人已经满了
  8.                 int count = 1225;
  9.                 int x = 0;                //初始人数0
  10.                 while(true){               
  11.                         x++;
  12.                         count = count-x+1;        //第x个人到来,与每一个先来的人握手后,剩下的握手次数
  13. //                        System.out.println(count);
  14.                         if(count==0)        //握手次数为0,人已经到齐
  15.                                 break;                       
  16.                 }
  17.                 System.out.println(x);               
  18.         }
  19. }
复制代码

作者: 王清华0    时间: 2013-8-8 20:53
这个问题怎么得到?
作者: 王清华0    时间: 2013-8-8 21:21
class Demo
{
        public static void main(String[] args)
        {
                int i = 1;//宴会的人数,从1开始
                int a = 0;//握手次数,从0开始               
                while (a<=1225)
                {//循环增加宴会人数,每增加1位嘉宾,i加1,a增加i-1次握手。
                        i = i+1;
                        a = a+i-1;
                }
                System.out.println("宴会总人数为:"+i);
               
        }
}
作者: 黄兴旺    时间: 2013-8-8 22:57
黄兴旺 发表于 2013-8-8 00:10
主啊  教教我怎样去除吧...

;P                                 
作者: 汪平乐    时间: 2013-8-9 18:10
看看0....00................00...
作者: vampire★sky    时间: 2013-8-9 19:08
我是来拿分的:(
作者: 秦兰之    时间: 2013-8-9 19:34
赶上一趟真不容易。
作者: vampire★sky    时间: 2013-8-9 19:38
public class Test1 {
        private double a, b, c;

        public Test1(double a, double b, double c) {
                this.a = a;
                this.b = b;
                this.c = c;
        }

        public static void main(String[] args) throws Exception {
                double[] results = new Test1(1, -1, -2*1225).analyze();
                for(int i = 0; i < results.length; i++){
                        if(results[i]>0){
                        System.out.println("j = " + results[i]);
                        }
                }
               
        }

        public double[] analyze() throws Exception {
                double delt = b * b - 4 * a * c;

                if (delt < 0) {
                        throw new Exception("NO result");
                } else if (delt == 0) {
                        double[] ary = { -b / (2 * a) };
                        return ary;
                } else {
                        double[] ary = new double[2];
                        ary[0] = (-b + Math.sqrt(delt)) / (2 * a);
                        ary[1] = (-b - Math.sqrt(delt)) / (2 * a);

                        return ary;
                }

        }

}
作者: vampire★sky    时间: 2013-8-10 12:10
vampire★sky 发表于 2013-8-9 19:38
public class Test1 {
        private double a, b, c;

怎么会有小数点,你运行程序撒
作者: panda@uu90    时间: 2013-8-11 01:13
* @author FatCat

*

*/

public class FatCat {



        public static void main(String[] args) {

                int n =1;//N存储人数

                int sum=0;//SUM存储握手次数

                while(true){//其实就是N-1的等差数列

                        if(sum==1225)//

                                break;

                        sum+=n;//不倒序,直接正序加

                        n++;

                }

                System.out.println(n);//输出人数

        }

}
虽然和我之前通过角标还有排序都不占,但是这个答案,易懂,简洁。
作者: 175299882    时间: 2014-5-10 13:43
学习学习




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