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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

lijia113 发表于 2013-8-7 00:07
结果是:参加与会的人员是:51

难道是50?我哪里算错呢?

点评

嗯,50  发表于 2013-8-8 22:25
回复 使用道具 举报

主啊  教教我怎样去除吧...

点评

汗、、、、、  发表于 2013-8-8 22:25
回复 使用道具 举报
看看题目
:o本贴由隐藏贴回复机快速回复
回复 使用道具 举报
本帖最后由 白堇翎 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 应该是输入1225,不过好像多算了个人.

查看全部评分

回复 使用道具 举报
为啥我总是后知后觉的。。。。

点评

每天休息放松的时候来论坛转转,指不定有啥活动呢  发表于 2013-8-8 15:53
回复 使用道具 举报
参与   
回复 使用道具 举报
look,看是否有时间弄:)
回复 使用道具 举报
:D我来看看哈
回复 使用道具 举报
  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);*/
复制代码

评分

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

查看全部评分

回复 使用道具 举报
眼看时间快到了,抓紧
回复 使用道具 举报
  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. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
这个问题怎么得到?
回复 使用道具 举报
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);
               
        }
}

评分

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

查看全部评分

回复 使用道具 举报
黄兴旺 发表于 2013-8-8 00:10
主啊  教教我怎样去除吧...

;P                                 
回复 使用道具 举报
看看0....00................00...
回复 使用道具 举报
我是来拿分的:(
回复 使用道具 举报
赶上一趟真不容易。
回复 使用道具 举报
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;
                }

        }

}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 人数还有小数点,汗、、、、、.

查看全部评分

回复 使用道具 举报
vampire★sky 发表于 2013-8-9 19:38
public class Test1 {
        private double a, b, c;

怎么会有小数点,你运行程序撒
回复 使用道具 举报
* @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);//输出人数

        }

}
虽然和我之前通过角标还有排序都不占,但是这个答案,易懂,简洁。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马