黑马程序员技术交流社区

标题: forx循环判断 [打印本页]

作者: 凝聚    时间: 2013-11-21 15:22
标题: forx循环判断
本帖最后由 凝聚 于 2013-11-22 09:25 编辑

题目是: 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
我的答案是:
package addtest;
public class Test10 {
        public static void main(String[] args) {
                 int[]a=new int[100];
         int i;
         for(i=0;i<100;i++)
         {
                 a=1;
         }
         for(i=0;i<100;i++)
         {
                 for(int j=1;j<=14;j++)
                 {
                 while(a!=0)
                 {
                 if(i%14==0)
                 {
                         a=0;
                         a[i+1]=a[j];////////////到了第十四个数后第十五个数让他的脚标为1,同理再往后走
                       //  System.out.println(i);
                 }
                 }
                 }
         }

if(a[1]==1)
{
          System.out.println(i);       
}

        }

}
这段代码无法运行?请大神指点
作者: qw无语    时间: 2013-11-21 15:48
                                while (a[i] != 0) {
                                        if (i % 14 == 0) {
                                                a[i] = 0;
                                                a[i + 1] = a[j];//                                                 // System.out.println(i);
                                        }
                                }
这无限循环了,就第一个数来说a[0]=1;
进入循环,判断if,将a[0]=0;将a[1]=a[1];
第2次a[1]!=0进入循环,判断if(1%14)不成立,此时i一直是1,
无限循环了...
作者: 凝聚    时间: 2013-11-21 15:59
qw无语 发表于 2013-11-21 15:48
while (a != 0) {
                                        if (i % 14 == 0) {
                                                a = 0;

该怎么改啊!
作者: qw无语    时间: 2013-11-21 16:03

这个题目用ArrayList集合好解决些,用数组很麻烦...
你这个思路我看不懂,我现在去写一个看看...不一定写的出.
作者: qw无语    时间: 2013-11-21 16:18
本帖最后由 qw无语 于 2013-11-21 16:19 编辑
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class Test2 {
  4. public static void main(String[] args) {
  5. List al = new ArrayList();
  6. for (int i = 0; i < 100; i++) {
  7. al.add(i);
  8. }
  9. int j = 1;
  10. while (al.size() != 1) {
  11. for (int i = 0; i < al.size(); i++) {
  12. if (j % 14 == 0) {
  13. System.out.println("死了一个" + al.remove(i));
  14. j = 1;
  15. }
  16. j++;
  17. }
  18. }
  19. for (int i = 0; i < al.size(); i++) {
  20. System.out.println("活着的是" + al.get(i));
  21. }
  22. }
  23. }
复制代码
由于第1个人的值是0.运行结果最后一个数是43
活着的是第44个人


作者: 凝聚    时间: 2013-11-21 16:48
qw无语 发表于 2013-11-21 16:18
由于第1个人的值是0.运行结果最后一个数是43
活着的是第44个人

可答案据说是九十二啊
作者: qw无语    时间: 2013-11-21 16:55
凝聚 发表于 2013-11-21 16:48
可答案据说是九十二啊

我擦- -list集合做出来的答案还是错的,这个不用list做出来的是对的
  1. public class Test2 {
  2. public static void main(String[] args) {
  3. int[] arr = new int[100];
  4. for (int i = 0; i < 100; i++) {
  5. arr[i] = i + 1;
  6. }
  7. int j = 1;
  8. int he = 0;
  9. while (he < 5050) {
  10. for (int i = 0; i < arr.length; i++) {
  11. if (j % 14 == 0) {
  12. if (arr[i] != 0) {
  13. System.out.println("死了一个" + arr[i]);
  14. he = he + arr[i];
  15. arr[i] = 0;
  16. j = 1;
  17. }
  18. }
  19. if (arr[i] != 0)
  20. j++;
  21. }
  22. }
  23. }
  24. }
复制代码
害的我找这个数组的错误找半天0 0,List是错的...


作者: 蓝雨星空    时间: 2013-11-22 22:40
我也做了一个,可以参考一下思路,个人觉得不适合使用数组做这个题,但是还没有学到后面,所以还是用的数组

  1.         public static void main(String[] args) {
  2.                 //题目是: 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  3.                 //定义一个整数数组,长度为100,内容为1到100。把第14个人所在的数组中的内容标记为0,意为这个人已经出局。
  4.                 int [] arr=new int[100];
  5.                 for(int i=0;i<100;i++)
  6.                 {
  7.                         arr[i]=i+1;
  8.                 }
  9.                
  10.                 //不知道循环次数,适合用while来实现
  11.                 int count=0,i=100;  //定义2个变量,count用来判断是否到14了。i 用来记录剩下的人数。
  12.                 while(true)
  13.                 {
  14.                         if(i==1)     //如果只剩下一个人了,则跳出循环。
  15.                                 break;
  16.                         for(int x=0;x<100;x++)   //不停地进行100次循环
  17.                         {
  18.                                 if(arr[x]!=0)      //判断这个人是否已经出局
  19.                                         count++;      //如果没有则计数器加 1
  20.                                 if(count==14)   //当计数器为14时,这个人出局,标记为0
  21.                                 {
  22.                                         arr[x]=0;    //这个人出局
  23.                                         count=0;   //计数器重置为0
  24.                                         i--;      //人数减 1
  25.                                 }
  26.                         }
  27.                 }
  28.                 //最后,打印剩下的一个数
  29.                 for(int x=0;x<100;x++)  //遍历数组,把剩下的那个人打印出来。
  30.                 {
  31.                         if(arr[x]!=0)
  32.                                 System.out.println(arr[x]);
  33.                 }

  34.         }
复制代码

作者: 掩饰一切、    时间: 2013-11-23 20:36
最后剩下的人=14或者不足14,你问最后剩下的是100人中的第几个人?是什么意思?题我不是很懂?




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