黑马程序员技术交流社区

标题: 这是我入学测试题之一,有点acm题的意思,这是写的代码..... [打印本页]

作者: 廖彬    时间: 2015-1-10 12:22
标题: 这是我入学测试题之一,有点acm题的意思,这是写的代码.....
package com.itheima.test;
/*
* 10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。
* 问:最后剩下的是100人中的第几个人?
*
*
                 *遇到难题:开始没读明白题目,以为最后会剩下13个人,读不到14,其实这道题意思是围成一个圈
                 *就算最后只有俩个人,互相报数直到谁念到14即淘汰,所以这里要淘汰99个人。
                 *思路:1定义一个数组,数组的的值和下标是相等的对应1-100人
                 *     2只要谁报数到14 就让对应数组的值归为0,用j记录,并且用count记录淘汰人数
                 *     3当淘汰人数到达99时 跳出循环
                 *     4当数组角标到达100时,将角标重新归置为0,这样可实现多次循环,直到淘汰人数达到99,才结束循环
                 *     这是我最初的想法 ,暂时未想到最优解,代码虽端,但99次的for循环1-100 时间着实浪费,等有时间我会参考改进
                 *     这道题的算法,
                 *
                 *
* */
public class test10
{
        public static void main(String[] args)
        {
               
                //淘汰人数
                int count = 0;
               
                //报数 号
                int j = 0;
               
                int[] a = new int[101];
               
                //给数组赋值角标对应着数组值
                for(int i = 0; i < 101; i++)
                        a[i] = i;
               
                for(int i = 1; i < 101; i++)
                {
                        //选出数组值不为0的数,
                        if(a[i] != 0)
                        {
                                //报数号增加
                                j++;
                               
                                if(j == 14)//当报数号增加到14时
                                {
                                        count++;//淘汰人数增加
                                       
                                        a[i] = 0;//淘汰人对应的数组值置零,不在参与if判断
                                       
                                        j = 0;//重新开始报号
                                }
                        }
                        if(i == 100)//当数组到100 时置零,重新开始循环
                                i = 0;
                       
                        //当淘汰人数为99时 退出整个循环
                        if(count == 99)
                                break;
                }
                //遍历数组,找出数组中不为零的数即为剩下的最后一个人
                for(int i = 1 ; i < 101; i++)
                {
                        if(a[i] != 0)
                                System.out.println("剩下的最后一个人为 :" + a[i]);
                }
        }
}
作者: Death、    时间: 2015-1-10 12:34
进来学习学习




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