经典算法

来源:互联网 发布:什么是nosql数据库 编辑:程序博客网 时间:2024/06/06 05:50

1、杀人算法

问题:把犯人围城一圈,每次杀掉第七个,又从第八个开始杀掉第七个,直到剩下最后一个

思想:从第七个人开始杀,杀完加上之前的6个人

代码如下

 

 

    publicstaticvoid main(String[] args) {

        Scanner scanner = new Scanner(System.in);

 

        int s = scanner.nextInt();

        List<Person> personlist =new ArrayList<Person>();

        System.out.println("人员有:");

        for (int i = 1; i < s; i++) {

            Person person =new Person(i,"" + i + "");

            personlist.add(person);

            System.out.print(person.getName() +",");

        }

        List<Person> list =killBody(personlist); // 开始杀第一个人,然后准备进入while循环

        while (list.size() > 6) {

            list = killBody(list);

        }

    }

 

    publicstatic List<Person> killBody(List<Person> personlist) {

        List<Person> personlisttemp =new ArrayList<Person>();

 

        int num = 0;// i = 7 就是第8个人,这就8开始计数了

        for (int i = 7; i < personlist.size(); i++) {

            personlisttemp.add(num, personlist.get(i));

            num += 1;

        }

 

        for (int i = 0; i < 6; i++) {

            personlisttemp.add(num, personlist.get(i));

            num += 1;

        }

 

        System.out.println();

        System.out.println("杀人:");

        for (int i = 0; i < personlisttemp.size(); i++) {

            Person person = personlisttemp.get(i);

            System.out.print(person.getName() +",");

        }

        System.out.println();

        return personlisttemp;

    }

2、时针分针问题

问题1:24小时之内,时针和分针总共相交几次

问题2:相交的时间是多少,请打印出来

思想1:24小时内分针走24圈,时针走2圈,所以相交22圈、(也可以这样理解,在12点到1点这中间没有相交,其他都相交了)

思想2:时针每分钟走0.5度,分针每分钟走6度。二者比赛跑步,相当于分钟走,时针不走 分钟的度数为5.5度。然后每次时针走的度数监区分针走的度数

代码如下

 

publicclass HourAndMinite {

 

    分针为计算单位

    时针小时每分钟走 360/12(个标志位)/60(分钟) = 0.5

    分针 360/60 = 6

publicstaticvoid main(String[] args) {

int count =0;

for(int h=1; h<=12; h++){//从第一小时开始算,不算12点开始重合的次数

for(int m=0; m<=60; m++){

    //这里是最关键的,因为小时走的度数不可能都是整数30*h,这里为了方便计算

    //给分钟变慢变成6-0.5 =这样就相当于是以时针不变,分钟在动。

double gap = (30 * h - 5.5 * m) % 360;

 

////分针一直在追赶时针和,那在接近重合的合时候的夹角不会超过6度,并且为正

if(0 < gap && gap < 6.0){

 

System.out.println(h +":" + m);

count++;

}

}

}

System.out.println("共重合:" + count +"");//22

//结果出现了11.59这里很明确应该是12随意这个时候需要改掉

}

原创粉丝点击