黑马程序员技术交流社区
标题:
这是一个简单的小程序
[打印本页]
作者:
flowerdance
时间:
2015-5-11 14:42
标题:
这是一个简单的小程序
package com.itheima;
import java.util.ArrayList;
class Mytestclass {
public void method(ArrayList al,int size,int y){
if(al.size()!=1){
for (int x = 1; x <size+1; x++) {
if((x+y)%14==0){
if(x==size){
al.remove(x);
y=0;
method(al,al.size(),0);
}
else{
al.remove(x);
}
}
else {
if(x==size){
y=(x+y)%14;
method(al,al.size(),y);
}
}
}
}
}
}
public class Test10 {
public static void main(String[] args) {
ArrayList<Integer> al=new ArrayList<Integer>();
for (int i = 1; i < 101; i++) {
al.add(i);
}
System.out.println(al);
Mytestclass mtc=new Mytestclass();
mtc.method(al,100,0);
System.out.println(al);
}
}
复制代码
上面程序,是解决下面这个问题:
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
我想问各位大神的是,我的代码哪里写错了,运行抛出角标越界异常,然后如果我的思路不正确,还请大神们给一个比较清楚思路的代码 谢谢啦
作者:
CoeusLYJ
时间:
2015-5-11 14:42
不能用取模方式,而应该采用计数方式。
package cn.itcast.blackhorse.demo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
/* 要求:
* 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
* 然后其他人重新开始,从1报数,到14退出。
* 问:最后剩下的是100人中的第几个人?
* 思路:
* 1、创建一个长度为101的int的数组,确认退出规则,1代表未报号,0代已经报号
* 2、对数组每一个元素进行赋值,除0角标不用赋值外,其他均赋值为1
* 3、设定一个计数器,使计数器初始为0,当计数器为14时进行重置
* 4、设定一个指针pointer,当pointer运算到数组最后一个元素时,再将定位置1角标
* 5、设定一个剩余人数,初始为100,当剩余人数为1时,返回该角标位置。
*
*/
public class Question {
public static void main(String[] args){
int[] arr=new int[101];
for (int i = 1; i<arr.length; i++) {
arr[i]=1;
}
System.out.println(Arrays.toString(arr));
getlastNumber(arr); //运行结果pointer=78
}
public static void getlastNumber(int[] arr) {
int num=100;
int count=0;
for (int pointer=1; pointer < arr.length; pointer++) {
if(arr[pointer]!=0){
count++;
if(count==14){
arr[pointer]=0;
count=0;
num--;
}
if(num==1){
System.out.print(pointer);
return;
}
}
if(pointer==arr.length-1)
pointer=1;
}
}
}
复制代码
作者:
只想好好的
时间:
2015-5-11 17:19
不知道对不?不懂在问我
package cxw.study.one;
import java.util.ArrayList;
import java.util.ListIterator;
public class Test2 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 1; i< 101; i++){
list.add(i);
}
System.out.println("过程:不知道对不对?");
work(list);
System.out.println("最后剩下第" + list.get(list.size()-1) + "个人!");
}
private static void work(ArrayList<Integer> list) {
int count = 0; //计数器
//list集合大小少于14就退出
if(list.size() < 14){
return;
}
ListIterator<Integer> iter = list.listIterator();
while(iter.hasNext()){
Integer num = iter.next();
System.out.print(num + " ");
count++;
if(count % 14 == 0){
System.out.println();
iter.remove();//移除iter.next()元素
work(list);//递归调用
}
}
}
}
运行:
过程:不知道对不对?
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 3 4 5 6 7 8 9 10 11 12 13 15
1 2 3 4 5 6 7 8 9 10 11 12 13 16
1 2 3 4 5 6 7 8 9 10 11 12 13 17
1 2 3 4 5 6 7 8 9 10 11 12 13 18
........
1 2 3 4 5 6 7 8 9 10 11 12 13 96
1 2 3 4 5 6 7 8 9 10 11 12 13 97
1 2 3 4 5 6 7 8 9 10 11 12 13 98
1 2 3 4 5 6 7 8 9 10 11 12 13 99
1 2 3 4 5 6 7 8 9 10 11 12 13 100
最后剩下第13个人!
作者:
小风1993
时间:
2015-5-11 18:40
package cn.itcase.it;
import java.util.*;
public class Test
{
public static void main(String[] args)
{
ArrayList<Integer> s=getSimple(100);
System.out.println(s.get(0));
}
public static ArrayList<Integer> getSimple(int max)
{
//定义一个数组,装入1到指定的100的所有值
ArrayList<Integer> arr=new ArrayList<Integer>();
for(int x=1;x<=max;x++)
{
arr.add(x);
}
//定义一个计数器
int count=0;
//开始循环,对集合进行遍历
while(arr.size()>1)
{
//遍历的时候count自加
for(ListIterator<Integer> li=arr.listIterator();li.hasNext();)
{
Integer i=li.next();
count++;
if(count==14)
{
li.remove();
count=0;
}
}
//判断当集合中只有一个元素时返回。
}
return arr;
}
}
作者:
枕寒流
时间:
2015-5-14 08:33
这是一首简单的小情歌,,,,
作者:
啊全
时间:
2015-5-15 23:06
大神!!!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2