`
piperzero
  • 浏览: 3594318 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

数三退一(利用java数组和对象解决问题)(转)

 
阅读更多

假设500个小孩手拉着手围着一圈,数三就退出圈子,最后留在圈内的小孩是第几号?

有一种是用很传统的算法,用数组来编。
程序代码如下:

public class CountThreeDel1 {
    public static void main(String args[]) {
       boolean[] arr = new boolean[500];
        for(int i=0;i<arr.length;i++){
           arr[i] = true;
        }
  
       int leftCount = arr.length;
       int countMum = 0;
       int index = 0;
  
       while(leftCount>1) {
           if(arr[index]==true) {
              countMum ++;
              if(countMum == 3) {
                  countMum = 0;
                  arr[index] = false;
                 leftCount --;
               }
            }
   
           index ++;
   
           if(index==arr.length) {
                 index = 0;
           }
       }
  
     for(int i=0;i<arr.length;i++) {
          if(arr[i]==true) {
              System.out.println(i);
               int d = i + 1;
              System.out.println("所以剩下的是第" + d + "号!");
          }
      }
    }
}


采用面向对象的思路:
面向对象的思路,首先考虑这个问题域中有那些类,类里面有哪些属性,哪些方法
题中有一个小孩和由一个小孩围成的圈。
程序代码如下:

public class CountThreeDel2 {
      public static void main(String[] args) {
              KidCircle kc = new KidCircle(500);
               int countNum = 0;
              Kid k = kc.first;
              while(kc.count > 1) {
                   countNum ++;
                   if(countNum == 3){
                         countNum = 0;
                           kc.delet(k);  
                    }
                    k = k.right;
               }
               System.out.print("剩下的小孩编号是:");
               System.out.println(kc.first.id+1);
       } 
}
class Kid {
      int id;
      Kid left;
      Kid right;
}
class KidCircle{
       int count = 0;
       Kid first;
       Kid last;

        KidCircle(int n ) {
             for(int i=0;i<n;i++) {
                    add();  
             } 
        }

        void add() {
              Kid k = new Kid();
             k.id = count;
              if(count <= 0) {
                    first = k;
                    last = k;
                    k.left = k;
                    k.right = k;
              } 
              else {
                      last.right = k;
                       k.left = last;
                      k.right = first;
                      first.left = k;
                      last = k; 
              }
              count ++;  
        }

        void delet(Kid k) {
              if(count <= 0) {
                   return;
              }
              else if(count == 1) {
                        first = last = null;
              }
              else {
                       k.left.right = k.right;
                       k.right.left = k.left;
   
                       if (k == first) {
                              first = k.right; 
                       }
                       else if(k ==last) {
                              last = k.left;
                       }
               }
              count --;
        }
}


分享到:
评论

相关推荐

    java 数组和字符串

    ### Java数组和字符串详解 #### 实验目标与背景 本次实验旨在深化理解Java中的数组与字符串操作,聚焦于`String`类与`StringBuffer`类的掌握,包括它们的常用方法、相等性判断的不同方式、数组的创建及引用机制,...

    java数组

    Java数组是程序设计中不可或缺的基础概念,它是一种数据结构,允许我们存储同类型的多个元素。在Java中,数组是对象,具有固定的大小,一旦创建,其长度...通过深入学习和实践,开发者可以更好地利用数组解决实际问题。

    java数组基础与典型应用

    在Java中,数组是一种引用类型,数组变量实际上是指向数组对象的引用,而数组对象则在堆内存中。这意味着数组的大小在创建时就已经确定,且不能改变。此外,对于对象类型的数组,每个数组元素实际上是对象的引用,而...

    07-Java基础(数组-常见问题)

    Java语言中的数组是编程中最基本的数据结构之一,它允许存储...通过理解和掌握这些知识点,开发者能够更好地利用Java中的数组来解决问题,避免常见错误,并提高程序的效率。在实际编程中,还需要结合具体场景灵活运用。

    实验五:Java数组与字符串

    在第三题中,我们利用逻辑判断和循环,模拟了校长询问四位同学的问题。通过测试每位同学的陈述,统计真话的数量,当真话数为3时,找到了做好事的同学。这种方法展示了如何在编程中解决逻辑推理问题。 总结来说,这...

    Java数组解说.zip

    Java数组是程序设计中基础且重要的数据结构之一,它在Java编程中扮演着不可或缺的角色。数组允许我们在同一变量中存储多个相同类型的数据,这使得我们可以高效地处理批量数据。本篇将深入解析Java中的数组概念、创建...

    JAVA迷宫,JAVA语言,数组

    "JAVA迷宫"这个概念可能是指利用Java语言解决的一种算法问题,即设计一个程序来解决或生成迷宫。迷宫问题通常涉及到路径搜索、图论以及数据结构,而这里特别提到了“数组”,这暗示我们可能会使用二维数组来表示迷宫...

    面试题涵盖Java数组常见操作和用法

    Java数组是编程中不可或缺的一部分,尤其在面试中,掌握其基本操作和用法至关重要。本文将深入探讨Java数组的各种知识点,帮助你准备相关的面试题目。 首先,了解Java数组的基础概念。数组是一种数据结构,用于存储...

    java源码:Java数组倒置.zip

    在Java编程语言中,数组是...通过学习和分析这些源代码,你可以更深入地理解Java数组操作,提高编程技巧,同时也能锻炼解决问题的能力。在实践中,数组倒置的技巧可能会被应用到各种数据结构和算法中,如排序、搜索等。

    使用json-lib将java对象转换成json字符串

    通过以上步骤,我们能够理解如何使用json-lib库将Java对象转换成JSON字符串,并了解了相关依赖库的作用和转换过程中可能遇到的问题及解决办法。在实际开发中,理解这些知识点有助于高效地处理数据交互。

    java--数组.txt

    ### Java数组深度解析 在Java编程语言中,数组是一种非常基础且重要的数据结构,它能够存储固定数量的同类型元素。...理解Java数组的本质有助于开发者更好地利用它们解决实际问题,并提高代码的质量和效率。

    java数组二分查找

    在这个例子中,`search` 方法接受一个已排序的整数数组和一个目标值,返回目标值在数组中的索引。`main` 方法演示了如何使用这个函数,首先创建一个有序数组,然后查找数组中的特定元素。 二分查找的时间复杂度为O...

    java不支持创建泛型数组(1)

    标签"源码"和"工具"暗示了解决这个问题可能需要深入理解Java的源代码,以及利用各种编程工具。在实际开发中,理解这一点对于编写健壮和安全的代码至关重要。开发者工具,如IDE的错误提示和警告,可以帮助识别并解决...

    数组面向对象实现订餐系统

    在编程领域,数组和面向对象是两种核心概念,特别是在Java这样的面向对象编程语言中。本项目"数组面向对象实现订餐系统"旨在帮助Java初学者理解如何将这两种概念结合运用到实际项目中。下面我们将详细探讨相关知识点...

    json转对象(java 多级嵌套)

    例如,假设有一个JSON对象,其中包含一个嵌套的对象数组,可以这样定义Java类: ```java public class OuterObject { private String someField; private List&lt;InnerObject&gt; innerObjects; // getters and ...

    数组概述和特点

    在Java中,数组对象存储在堆内存中,不论数组元素是原始类型还是其他对象类型。 创建数组的过程包括声明和实例化两个步骤。声明数组时只定义了数组变量,而实例化时才分配内存。以下是一维数组的创建示例: ```...

    java【第4章:数组与方法】_数组的引用传递.

    这就意味着,如果你在方法中修改了数组的内容,这些变化将会影响到调用该方法的主程序,因为它们共享同一个数组对象。 数组引用传递的示例代码如下: ```java public class ArrayReferenceExample { public ...

    利用数组和循环实现的五子棋 第一个项目

    本项目“利用数组和循环实现的五子棋”是初学者学习Java的一个很好的起点,它涉及到基础的编程概念,如数组、循环以及简单的游戏逻辑。下面将详细介绍这个项目中的相关知识点。 1. **数组**:在Java中,数组是一种...

    java面向对象语言的实验报告

    - 封装是面向对象的三大特性之一,指隐藏对象的属性和实现细节,仅对外提供公共访问方式。 - 通过构造函数和成员变量、方法的修饰符的使用,可以实现类的封装性。 - 理解类的封装性有助于设计出结构良好且易于...

    JAVA通过数组按首字母排序

    本篇文章将详细介绍如何利用Java内置的`Arrays.sort()`方法按照字符串的首字母进行排序,以及如何处理大小写敏感性问题。 #### 一、基础知识简介 在开始之前,我们先了解几个基本概念: - **字符串数组**:一个由...

Global site tag (gtag.js) - Google Analytics