【第九周项目1- 猴子选大王(数组版)】_猴子选大王用数组怎么写_Cube_007的博客-程序员秘密

技术标签: 数据结构  

问题及代码:

/*
 * Copyright (c) 2016, 烟台大学计算机与控制工程学院
 * All rights reserved.
 * 文件名称:Cube007.cpp
 * 作    者:刘小楠
 * 完成日期:2016年10月27日
 *
 * 问题描述:输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。
 * 输入描述:m,n
 * 输出描述:猴子号码
 */
#include <stdio.h>
#define MaxSize 100
void king(int m,int n)
{
    int p[MaxSize];
    int i,j,t;
    for (i=0; i<m; i++)         //构建初始序列,记录m只猴子在p[0]~p[m-1]中
        p[i]=i+1;
    t=0;                        //首次报数的起始位置为0
    printf("猴子号码顺序:");
    for (i=m; i>=1; i--)        //循环要执行m次,有m个猴子要出圈;共有i从m开始递减至1,i还表示在圈中猴子的数目
    {
        t=(t+n-1)%i;            //从t开始数1,其后第n-1个将数到n,t加n-1用%i取余,目的是到达最后一个猴子可以折回去继续数
        printf("%d ",p[t]);     //编号为p[t]的元素出列
        for (j=t+1; j<=i-1; j++)//后面的元素前移一个位置,删除了编号为p[t]的猴子
            p[j-1]=p[j];
    }
    printf("\n");
}

int main()
{
    int m,n;
    scanf("%d %d", &m, &n);
    king(m,n);
    return 0;
}

运行结果:



知识点总结:
约瑟夫问题的数组解法。

学习心得:
约瑟夫问题是算法当中较为经典的问题,其中应该可分为三种,大一当中未懂的东西一定要抓好数据结构这个机会将这个漏洞补上。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dlkfjdfj/article/details/52943195

智能推荐

web端 微软 RDLC 报表插件 宽大于高 横向打印失效 解决方案_dengqiu2187的博客-程序员秘密

起因于系统报表工具使用的RDLC,本地测试一直使用的纵向打印,未测试过横向打印????。甲方提供的打印机为HP1106,支持纵向打印,但!领导要求必须横向打印????,因此还拖延了实施进度????。先总结一下遇到的问题微软官方RDLC报表工具使用起来不太方便,也因单据复杂度而异。在遇到这个问题时上网搜索发现,一致认为此问题为BUG,在CS端可以解决,但是BS端未提供解决方案。...

如何在Pycharm中导入库_pycharm导入库_白仑色的博客-程序员秘密

一、打开Pycharm,找到File,打开。二、找到Settings打开三、打开之后会有个Project Interpreter选项,然后点击打开。右边有个小加号,就是添加库的。四、上面输入你想添加的库名,点击左下角Install Package即可安装,等待安装完会有提示...

linux安装openjdk11或1.8_openjdk11和jdk1.8_芬芳酩酊的博客-程序员秘密

1.yum搜索版本yum search java/grep jdk2.选择安装的版本yum install java-11-openjdk.x86_64开始下载资源命令行询问是否安装?输入 y 【yes的意思】继续下载及安装,直至下载安装完毕安装完毕后默认在/usr/lib/jvm这个地址查看安装完毕的版本3.配置环境变量及查看java版本及是否可用 javac配置环境变量:在 /etc/profile文件底部新增如下配置JAV.......

QTableWidget表格控件的用法_姬无的剑的博客-程序员秘密

QTableWidget 是 Qt 提供的一种表格控件(如图 1 所示),类似于我们经常使用的 Excel 表格,可以将数据以表格的方式展示给用户。QTableWidget 的结构布局如图 1 所示。默认情况下,表格会显示表头,表头的内容为行号或列号。根据实际需要,我们可以将表头隐藏起来。QTableWidget 继承自 QTableView 类,QTableView 类也可以用来显示表格控件。

算法之路二:刘汝佳算法竞赛入门经典 3.5Tex中的引号 UVa272_EUSIA的博客-程序员秘密

#include<stdio.h>int main(){ char c; int q=1; while((c=getchar())!=EOF) { if(c=='"')//找到引号 { printf("%s",q?"``":"''");//q=1上引号;q=0,下引 q=!q;//

如何从命令行添加,删除和管理Windows共享网络驱动器?_cunjiu9486的博客-程序员秘密

Windows operating systems provides some mechanism to share the resources between different systems. One of the most known and popular tool to manage these resources is netcommand whit related sub com...

随便推点

使用Bundle在Activity之间传递数据_liuzhidong123的博客-程序员秘密

Bundle可能过put****()方法添加各种类型的数据,Intent也可以通过putExtras(Bundle)将数据添加进去,然后通过startActivity()跳到下一下Activity的时候就把数据也传到下一个Activity了。package com.intent;import android.app.Activity;import android.content.Inte

Intel SGX Edger8r_dianyangshu0904的博客-程序员秘密

“The Edger8r tool ships as part of the Intel Software Guard Extensions SDK. It generates edge routines by reading a user-provided Enclave Description Language (EDL) file. These edge routines def...

hive rows between和range between使用_hive range between_小涛手记的博客-程序员秘密

create table tmp( name string, class tinyint, cooperator_name string, score tinyint)row format delimited fields terminated by '|';adf|3|测试公司1|45asdf|3|测试公司2|55cfe|2|测试公司2|743dd|3|测试公司5|nfda|1|测试公司7|80gds|2|测试公司9|92ffd|1|测试公司10|95dss

C# thread的join方法使用解析_c# thread join_lanhaics的博客-程序员秘密

在C#中,Thread用的是比较多的,至少在windows form中使用是比较频繁的。一说到线程,可能马上就会想到界面和线程交互的头疼事,多线程之前数据共享,线程异步等等。这些当然是比较头疼的,只要有信心 ,慢慢来,相信理解不是难事。对于Thread中的join方法,主要是用来阻塞当前线程,等待子线程完成后再进行运行。也就是其实所谓的线程合并。比如说主线程派生了子线程,如果想让子线程完成之前

查找目录或文件的几种方法_LuckyJan的博客-程序员秘密

(A)指定文件查找function TForm1.findSpecFile(sDirectory,fName:string):boolean;var sr: TSearchRec  ;begin  if FindFirst(sDirectory+fName, faAnyFile, sr) = 0 then  begin    FindClose(sr);    result:=true;  end

RocketMQ-01实战教程_rocketmq高级教程_lucky_dogwang的博客-程序员秘密

1. MQ介绍1.1 为什么要用MQ消息队列是一种“先进先出”的数据结构其应用场景主要包含以下3个方面应用解耦系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。使用消息队列解耦合,系统的耦合性就会提高了。比如物流系统发生故障,需要几...

推荐文章

热门文章

相关标签