一群人围成一个圈,依次1,2,3报数,数到3的人出列,求最后出列的哪个人

本文提供了一个关于500人参与的数退问题的Java实现方案,通过循环和条件判断来模拟每三个人中有一个人退出的过程,直至剩下最后一名参与者。该程序采用布尔数组记录每个人的状态,并通过迭代更新剩余人数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//假设为500个人
public class  Count4Quit
{
    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 countNum = 0;
       int index = 0;

       while (leftCount >1)
       {
            if(arr[index] == true)
           {
                countNum++;
                if(countNum == 3)
               {
                   countNum = 0;
                   arr[index] = false;
                   leftCount --;
                }
            }
 
            index++;

            if(index == arr.length)
            {
                 index = 0;
            }
       }

             for(int i=0;i<arr.lenght;i++)
            {
                if(arr[i] == true)
            {
          System.out.println(i);
       }
     }
   }
}

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/wangcheng8080/archive/2008/05/08/2419218.aspx

问题描述 设计循环链表解决约瑟夫问题:给定一组输入据 a0, a1, ...,aN(int 型、float 型或 char 型),选取 x(x>=1)作为计上限,从 a0 开始按顺序报数,将第 x 个元素出列。x 之后的第一个元素继续从 1 开始报数,报到 x 的元素再出列,重复该过程 y 次(y<=组长度)。 要使用链表和泛型编程,输出每次出列元素的值。从最后一个出列元素的下一个元素开始,按循环顺序输出所有剩余元素。 输入 第一行输入组的据类型(int, float 或 char); 第二行输入组的大小 N(N >= 0); 第三行输入组的元素,元素之间采用单个空格分隔; 第四行输入 x y 的值 输出 第一行输出原始的输入组; 第二行至第 y+1 行输出出列元素; 最后一行输出所有剩余元素。 样例 输入: int 5 1 2 3 4 5 2 2 输出: 1 2 3 4 5 2 4 5 1 3#include <iostream> using namespace std; template <typename T> struct Node { // 定义节点 Node *next; T value; }; template <typename T> class List { // 定义单向循环链表 public: Node<T> *record; // 定义当前操作指针(null) int length; List() : record(nullptr), length(0){}; // 初始化链表 ~List() { delete record; } void insert(T value) /* 函名:insert 输入值:泛型 value 功 能:向循环链表中插入一个节点,值为value */ { Node<T> *node = new Node<T>; // 新加入节点 node node->value = value; // 新节点 node 赋值 node->next = nullptr; // 新节点的 next 节点 length = length + 1; // 链表长度增加 /*============================ 请在此处完成代码 ============================*/ } T pop(int position) /* 函名:pop 输入值:整型 position 功 能:将position位置的节点进行出队,返回值为该节点 */ { position = position + length; for (int i = 1; i < position; i++) // 通过顺序循环,将当前操作指针移动到被删除节点的前驱 record = record->next; /*============================ 请在此处完成代码 ============================*/ p = nullptr; // 智能指针删除节点 length = length - 1; // 元素出栈后,链表长度减一 if (length == 0) record = nullptr; // 链表中没有元素,指向空指针 return temp; } void printAll() /* 函名:printAll 输入值:无 功 能:遍历并输出队列 */ { Node<T> *p = record; if (p == nullptr) { // 若 record 为空,则链表为空,输出为空 cout << endl; return; } cout << p->next->value; // 否则输出头
最新发布
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值