好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

猴子选大王php 猴子选大王java

很多站长朋友们都不太清楚猴子选大王php,今天小编就来给大家整理猴子选大王php,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 猴子选大王的课程实验报告 2、 PHP算法之猴子选大王 3、 c语言链表问题,猴子选大王,哪位大神能帮我看看 4、 PHP猴子选大王 5、 猴子选大王 6、 猴子选大王算法(快 得急) 猴子选大王的课程实验报告

任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

要求:

输入数据:输入m,n m,n 为整数,n<m

输出形式:中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能

#include <stdio.h>

#include <stdlib.h>

typedef struct monkey

{

int num;

struct monkey *next;

} Monkey,*LINK;

/*创建循环链表,容纳M个猴子。返回指向链表头结点的指针*/

LINK createList(int M)

{ LINK p,head1,p2;

int i;

head1=p=p2=(LINK)malloc(sizeof(Monkey));

for(i=1;i<M;i++)

{

p=(LINK)malloc(sizeof(Monkey));

p2->next=p;

p2=p;

}

p2->next=head1;

p=head1;

printf("对猴子进行编号!\n");

for(i=1;i<=M;i++)

{

p->num=i;

printf("%d号猴子:%d\n",p->num,p->num);

p=p->next;

}

return head1;

}

/*形成循环链表*/

/*从headP指向的循环链表中选大王,数到N的猴子淘汰,将依次淘汰出来的猴子插入到headPtr2指向的链表中*/

void selectKing(LINK head,int N,int M)/*N>=2*/

{

LINK p,p2,head2=NULL;

int i;

i=0;

p=head;//p指向第一个结点

while(1)

{

i++;

printf("%d号猴子报:%d\n",p->num,i);

if(p->next==p)

break;//此为while循环的出口

if(i==N)//if语句中是删除结点的过程

{

i=0;

printf("%d号猴被淘汰\n",p->num);

printf("\n");

p2->next=p->next;//在此删除结点p

p=p2->next;//p指向它的下一个结点

continue;

}

else

{

if(i==N-1)

p2=p;//保存将要退出结点的前一个结点(存到p2中)

p=p->next;

}

}

}

int main()

{

LINK head=NULL;

int M,N;

printf("输入猴子数量:");

scanf("%d",M); /*猴子个数*/

printf("输入选定的一个小于猴子总数的数:");

scanf("%d",N); /*count=3,表示每次数到3的猴子出局*/

head=createList(M);/*创建循环链表*/

selectKing(head,N,M);/*选大王*/

return 0;

}

PHP算法之猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:让M只候选猴子围成一圈,从某位置起顺序编号为1~M号。从第1号开始报数,每轮从1报到N,凡报到N的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

请输入猴子的数量m 11

请输入要排除第几个猴子n 3

7

常规做法又两种,一种是数组,一种是链表,(数学方法不考虑)。对于数组方法测试了两种思路,第一种是生成一个键为1-M的关联数组,值为true,退出的键值为false;另一种是值为1-M的数值数组,退出的unset;结果是使用unset效率更高些。链表是用数组模拟的链表,生成键为1-M的关联数组,值为下一位的键值,最后一位的值为1。退出了就把上一位和下一位链接起来。测试表明,使用链表的速度快于数组。

c语言链表问题,猴子选大王,哪位大神能帮我看看

#include <stdio.h>

#include <stdlib.h>

typedef int status;

typedef int ElemType;

typedef struct NODE_MONKY

{

ElemType serial_number;

struct NODE_MONKY *next;

}LNode, *LinkList;

void Build(LinkList L,int n){

LinkList p,q;

p = L;

for(int i=0;i<n;i++)

{

printf("%d\n",i+1);

q = (LinkList)malloc(sizeof(LNode));

q -> serial_number = i+1;

q -> next = NULL;

p -> next = q;

p = q;

}

p -> next = L->next;

}

void Print(LinkList L,int x)//计算单链表的长度,然后输出单链表

{

    LinkList p;

    p=L->next;

    while(x--)

    {

        printf("%d ",p->serial_number);

        p=p->next;

    }

}

void Delete(LinkList L,int x,int y)//删除值为x的结点

{

    LinkList p,q;

p=L->next;

for (int i = 1; i < y; i++)

{

for(int j = 2; j < x ; j++)

{

p = p->next;

printf("serial_number change = %d\n",p->serial_number);

}

q = p->next;

        p->next = q->next;

        printf("delete %d success\n",q->serial_number);

        printf("p->serial_number = %d\n",p->serial_number);

        free(q);

        q = NULL;

        p = p->next;

        printf("p->serial_number now = %d\n",p->serial_number);

}

}

int main()

{

int m,n;

LinkList L,p,q;

L = (LinkList)malloc(sizeof(LNode));

L -> next = NULL;

L -> serial_number = 1;

printf("please input the number of mounky.\n");

scanf("%d",n);

Build(L,n);

Print(L,n);

printf("Please input the number M\n");

scanf("%d",m);

Delete(L,m,n);

}

PHP猴子选大王

$arr[] = $arr[$i]的意义在于 $arr[$i]是将确定键的值取出赋值给$arr[] 而$arr[]的键在没有特殊声明的赋值的时候是自动增长的,所以【不是覆盖】。

unset($arr[$i])是将数组$arr中键为$i的值释放掉。不是释放的整个$arr数组。

猴子选大王

1.需求分析:

根据问题描述可知,该问题中m个猴子围坐在一起形成首尾相接的环,因此可用循环链表解决。从第n个猴子开始出列相当于从链表中删除一个结点。该程序主要有三个模块组成,建立单链表,报数利用do-while循环实现猴子的出列,最终剩下的猴子即猴王。具体步骤如下:

第一步 首先创建循环链表。

第二步 向单链表中填入猴子的编号

第二步 找第一个开始报数的猴子。

第三步 数到n让这个猴子出列。

第四步 接着开始报数,重复第三步

2.概要设计(流程图)

开始

定义结构体,变量

建立循环单链表

在循环链表填入数据

猴子数数Count++

Count= = n-1?

释放第n个猴子

指针q指向第n+1个节点q=q->next

否

q->next= =q?

是

猴王就是第q-〉data 个猴子

结束

3.详细设计:

#include

#include

struct Node

{

int data;

struct Node *next;

};

int main()

{

struct Node *head, *s, *q, *t;

int n, m, count=0, i;

printf("input the number m:");

scanf("%d",m);

printf(" input the number n:");

scanf("%d",n);

for(i=0; i< i++)>

{

s=(struct Node *)malloc(sizeof(struct Node));

s->data=i+1;

s->next=NULL;

if(i= =0)

{

head=s;

q=head;

}

else

{

q->next=s;

q=q->next;

}

}

q->next=head;

printf("before:");

q=head;

while(q->next!=head)

{

printf("%d ",q->data);

q=q->next;

}

printf("%d ",q->data);

q=head;

printf(" ");

do {

count++;

if(count= =n-1)

{

t=q->next;

q->next=t->next;

count=0;

printf("%d ", t->data);

free(t);

}

q=q->next;

}

while(q->next!=q);

printf(" the king is: %d ",q->data);

}

4.测试数据:

1)input the number m:20

input the number n:5

before:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

5 10 15 20 6 12 18 4 13 1 9 19 11 3 17 16 2 8 14

the king is: 7

2)input the number m:9

input the number n:11

before:1 2 3 4 5 6 7 8 9

2 5 9 7 8 4 1 3

the king is: 6

3)input the number m:10

input the number n:5

before:1 2 3 4 5 6 7 8 9 10

5 10 6 2 9 8 1 4 7

the king is: 3

猴子选大王算法(快 得急)

我用java写了一个,也是给人帮忙啦,可以给兄台参考参考,有空的话,给你改个指针版出来

MonkeyNumber.java源程序如下:

package test;

import java.util.Scanner;

/**

* @author Administrator

*

* 有M只猴子围成一圈,每只各一个从1到M中的编号,

* 打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,

* 数到N的猴子出圈,最后剩下来的就是大王。

* 要求:从键盘输入M、N,编程输出猴子出列的次序并计算哪一个编号的猴子成为大王(用数组实现)。

* 要求程序完整,并且验证过,

*

*/

public class MonkeyNumber {

/**

* 出圈

* <b>方法描述</b>:第outNo号出圈 <p>

* <b>方法流程</b>:

* <p>

* @param monkey

* @param n

* @return outNo 出圈的索引号

*/

private static int getOut(int[] monkey,int n){

int outNo = -1;

int intValidVoters = getVotersNumber(monkey);

for(int i=0; i<monkey.length; i++){

if(intValidVoters > n){

if(monkey[i]==n%intValidVoters){

outNo = i+1;

monkey[i]=-1;// 去除该位置的值

System.out.print("--编号为["+outNo+"]的猴子出圈!--");

return outNo;

}

}

else if(intValidVoters < n){

if(monkey[i]==(n%intValidVoters==0?intValidVoters:n%intValidVoters)){

outNo = i+1;

monkey[i]=-1;// 去除该位置的值

System.out.print("--编号为["+outNo+"]的猴子出圈!--");

return outNo;

}

}

else if(intValidVoters==n){

if(monkey[i]==n){

outNo = i+1;

monkey[i]=-1;// 去除该位置的值

System.out.print("--编号为["+outNo+"]的猴子出圈!--");

return outNo;

}

}

}

return outNo;

}

/**

* 重新初始化数组

* <b>方法描述</b>:对输入的数组重新进行赋初值 <p>

* <b>方法流程</b>:

* <p>

* @param monkey

* @param startPos 从startPos位置开始赋初值,startPos索引的数组,其值置为1

*/

private static void reAssign(int[] monkey, int startPos){

int count = 0;

//数组中大于等于位置startPos的有效值的个数

int behindCount = getVotersNumber(monkey, startPos);

//对号码重新初始化

for(int i=0;i<monkey.length; i++){

int differenceValue = i-startPos+1;

if(monkey[i] != -1){

if(differenceValue < 0){

monkey[i]= ++behindCount;

}

else if(differenceValue >= 0){

monkey[i]= ++count;

}

}

}

}

/**

* <b>方法描述</b>:取得当前有效选民数 <p>

* <b>方法流程</b>:

* <p>

* @param monkey

* @return

*/

private static int getVotersNumber(int[] monkey){

int count = 0;

//计算目前多少个号码有效

for(int i=0;i<monkey.length; i++){

if(monkey[i] != -1){

count++;

}

}

System.out.print("当前有["+count+"]只猴子参加选举!");

return count;

}

/**

* <b>方法描述</b>:取得大于等于位置startPos的有效选民数 <p>

* <b>方法流程</b>:

* <p>

* @param monkey

* @return

*/

private static int getVotersNumber(int[] monkey,int startPos){

int count = 0;

//计算目前多少个号码有效

for(int i=startPos;i<monkey.length; i++){

if(monkey[i] != -1){

count++;

}

}

return count;

}

/**

* <b>方法描述</b>:主程序 <p>

* <b>方法流程</b>:测试

* <p>

* @param args

*/

public static void main(String[] args){

System.out.println("Input:M N ");

Scanner scanner = new Scanner(System.in);

String strM = scanner.next();

String strN = scanner.next();

while (strM == null || !strM.matches("[0-9]+")){

System.out.println("输入错误,您输入的第一个参数不是数字,请再次输入:");

scanner = new Scanner(System.in);

strM = scanner.next();

}

while (strN == null || !strN.matches("[0-9]+")){

System.out.println("输入错误,您输入的第二个参数不是数字,请再次输入:");

scanner = new Scanner(System.in);

strN = scanner.next();

}

int m = Integer.parseInt(strM);

int n = Integer.parseInt(strN);

System.out.println("当前有::["+m+"]只猴子"+",即将报的数是::["+n+"]");

int monkey[] = new int[m];

//赋初值

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

monkey[i]=i+1;

}

for(int i=0; i<m-1; i++){

//出圈

int outNum = getOut(monkey,n);

int startPos = -1;

if(outNum==m){

startPos = 0;

}

else{

startPos = outNum;

}

//再次循环赋初值

reAssign(monkey,startPos);

System.out.println();

}

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

if(monkey[i]!=-1){

System.out.println("Voting Success!!!编号为["+(i+1)+"]的猴子成为大王!");

}

}

}

}

关于猴子选大王php的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于猴子选大王php 猴子选大王java的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did195650
更新时间:2023-04-26   阅读:19次

上一篇: php2进制转换 php 进制转换

下一篇:wms仓库管理php wms仓库管理软件心得体会

最新资料更新

  • 1.php接收xml异常 php处理xml数据
  • 2.php网页打印控件谷歌 php打印插件
  • 3.影视php解析api php解析vip视频
  • 4.php脚本在线解密 php解密网站程序源码
  • 5.php降低curl版本 php怎么升级版本
  • 6.php环境配置工具 phpstorm2021配置php环境
  • 7.php技术网学习 php技术门户
  • 8.PHP安装宽带办理 php网站安装
  • 9.登录注册的php代码 php用户注册登录代码
  • 10.php数组冒泡排序 php冒泡排序面试题
  • 11.php异步协程 php yield 异步
  • 12.php比较运算符价格 php中用于比较字符串的函数
  • 13.php每天更新数据 php数据库更新语句
  • 14.php生成uuid php生成随机6位数
  • 15.PHP中嵌入script php嵌入html有哪几种方法
  • 16.扫描登录php代码 扫描登录php代码错误
  • 17.php操作redis存值 php redis数据类型
  • 18.phpnodelay的简单介绍
  • 19.php文字合到图片 php 图片合成
  • 20.包含asp和php互通的词条

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]