A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 神之梦   /  2013-8-6 21:11  /  9200 人查看  /  87 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 浪无痕-陈文坤 于 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;呵呵

点评

哥们,用程序写啊  发表于 2013-8-6 23:28
回复 使用道具 举报
我来看看。哈哈
回复 使用道具 举报
本帖最后由 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
但是具体用代码表示,我还真有点不会,我发表,只是想让高人提点。另外补充代码。谢谢

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 不错,不过没代码只能给一分了.

查看全部评分

回复 使用道具 举报
本帖最后由 肥猫 于 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. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2

查看全部评分

回复 使用道具 举报
先看看题目吧...
回复 使用道具 举报
:)                        
回复 使用道具 举报
:lol              
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2

查看全部评分

回复 使用道具 举报
  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

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 多了一个人

查看全部评分

回复 使用道具 举报
浪无痕-陈文坤 发表于 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,今早再写,可以吗,刚入门不久,呵呵
回复 使用道具 举报
本帖最后由 oath 于 2013-8-7 00:28 编辑
  1. class SumPeople {
  2.         public static void main(String[] args){
  3.                
  4.                 //我们知道 握手的总次数是(n(n-1))/2
  5.                
  6.                 for(int n = 1; n < n+1; n++){
  7.                        
  8.                         //定义一个变量,记录n个人握手的总次数
  9.                         int x = (n*(n-1)) /2;
  10.                        
  11.                         //如果总次数为1225,将值赋给sumPeople,然后跳出循环
  12.                         if( x == 1225){
  13.                                 int sumPeople = n;
  14.                                 System.out.println("总人数是 "+sumPeople);
  15.                                 break;
  16.                         }
  17.                 }
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2

查看全部评分

回复 使用道具 举报
  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:}

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2 人数不要出现小数点啊

查看全部评分

回复 使用道具 举报
本帖最后由 浪无痕-陈文坤 于 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)的都可以。手下留情,新手呀(虽然不是很好的理由,但现在急用技术分)谢谢!!

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2

查看全部评分

回复 使用道具 举报
出新题了呀~我来了。
回复 使用道具 举报


/**
* 题目:
       宴会上一共有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;
   }
  }
}


}

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2

查看全部评分

回复 使用道具 举报
答题喽,题目快来
回复 使用道具 举报
先看看,。:)
回复 使用道具 举报
我也来参加一下
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 哥们,你不要只给出一部分,让我来帮你写主.

查看全部评分

回复 使用道具 举报
本帖最后由 乔小北 于 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

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马