C语言围圈报数题目代码实现

我先来介绍一下 “C语言围圈报数题目代码实现” 是什么:

这是一道经典的数学题目,题目有三个人围成一圈,他们报数,规定报到第三个人的时候要翻过去,也就是从头开始,如此循环,直到只剩下最后一个人。现在我们需要用C语言实现这个过程。

下面是该算法的完整实现,以及代码解析:

思路分析

1.将所有人简化为一个数组,数组的下标表示的是人的编号。
2.从第k个人开始循环报数,每报到第m个人时,这个人就要被淘汰,他的位置为0。
3.继续从下一个人开始报数。
4.最后只有一个人留下时,他就是胜者。

代码实现

#include <stdio.h>
#define N 10 //定义有多少个人
int a[N + 1];

int main()
{
    int k, m, i, n;
    printf("请输入k和m的值: ");
    scanf("%d%d", &k, &m);

    //依次从n=1开始,淘汰到只剩下一个人
    for (n = N; n >= 1; n--)
    {
        //重设报数起始点和报数个数
        i = k;
        while (1)
        {
            while (a[i] == 0)
            {
                i++;
                if (i > N)
                    i = 1;
            }
            m--;
            if (m == 0)
            {
                a[i] = 0;
                printf("%d ", i);
                break;
            }
            i++;
            if (i > N)
                i = 1;
        }
    }

    //输出胜出者的编号
    printf("\n胜出者的编号为: ");
    for (i = 1; i <= N; i++)
    {
        if (a[i] != 0)
            printf("%d ", i);
    }
    return 0;
}

代码中用数组a[N+1]存放所有人的状态,为0表示已被淘汰,不为0表示还在游戏中。

代码中用循环来依次淘汰所有人,并将最后胜出的人的编号输出。

示例说明

假设有三个人围成一圈,起始编号分别为1,2,3,则输入k=1,m=3,即第一个人从1开始报数,每报到3就淘汰。

执行结果:

请输入k和m的值: 1 3
3 1 
胜出者的编号为: 2 

最终胜出者的编号为2。

再假设有五个人围成一圈,起始编号分别为1,2,3,4,5,则输入k=1,m=2,即第一个人从1开始报数,每报到2就淘汰。

执行结果:

请输入k和m的值: 1 2
2 4 1 5 
胜出者的编号为: 3 

最终胜出者的编号为3。

以上就是完整的 “C语言围圈报数题目代码实现” 的攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言围圈报数题目代码实现 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C++实现统计代码运行时间的示例详解

    C++实现统计代码运行时间的示例详解 什么是代码运行时间 代码运行时间指的是从程序开始执行到程序结束运行所需要的时间。在程序开发中,我们通常会关注代码的运行时间,以确定程序的性能和优化方向。 如何统计代码运行时间 一般情况下,我们可以使用系统提供的时间函数来统计代码的运行时间。在 C++ 中,常用的时间函数有 clock 和 chrono。 使用 clock…

    C 2023年5月24日
    00
  • 比特币真的值得长期持有和投资吗一文弄懂

    “比特币真的值得长期持有和投资吗” 完整攻略 1. 什么是比特币? 比特币是一种基于区块链技术的加密数字货币,由匿名的发明者“中本聪”在2009年发布。比特币的交易和管理是通过去中心化的方式进行,独立于中央机构或政府控制。 2. 比特币的特点 2.1 去中心化 比特币的交易和管理不需要中央机构或政府控制,而是由全球网络的节点共同维护、管理。 2.2 匿名性 …

    C 2023年5月22日
    00
  • C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 什么是静态顺序表? 顺序表是一种连续的存储结构,在内存中占用一段连续的空间,可以用数组结构来实现。静态顺序表是指在创建时就分配一定大小的存储空间,无法动态调整大小。 如何实现静态顺序表? 在C语言中,我们可以利用数组结构来实现静态顺序表。具体实现方式如下: 首先,我们需要定义一个结构体来表示顺序表: #define MAXSI…

    C 2023年5月23日
    00
  • php处理json格式数据经典案例总结

    下面是完整的“php处理json格式数据经典案例总结”的攻略: 什么是JSON数据格式? JSON是目前使用最广泛的跨语言数据交换格式之一,其全称为JavaScript Object Notation。JSON是一种轻量级且易于人理解的数据格式,通常用于传输网页和移动应用程序中的数据。它是一种文本格式,使用Unicode字符集。JSON由键值对构成,键和值之…

    C 2023年5月23日
    00
  • 基于C语言实现学生选课系统

    基于C语言实现学生选课系统完整攻略 系统需求分析 要实现一个学生选课系统,我们需要以下几个必要的功能模块:- 学生登录模块- 教师登录模块- 管理员登录模块- 选课模块- 退课模块- 显示已选课程模块 系统设计 根据以上需求分析,我们可以设计出如下的系统框架: int main(){ int choice; while(1){ printf("请输…

    C 2023年5月23日
    00
  • JS如何在数组指定位置插入元素

    JS中在数组指定位置插入元素可以使用splice()方法,该方法可以同时用来添加、删除和替换数组中的元素。 方法原型如下: array.splice(start[, deleteCount[, item1[, item2[, …]]]]) start:指定插入或删除的起始位置,如果为负数,则从数组的末尾开始计算位置。 deleteCount:删除的元素个…

    C 2023年5月23日
    00
  • c++动态内存管理与智能指针的相关知识点

    C++动态内存管理与智能指针攻略 知识点介绍 在 C++ 编程中,动态内存管理是非常重要的一部分。当我们需要在程序运行时动态生成对象或者数组,需要使用动态内存。但是,如果我们没有妥善管理动态内存,就会出现内存泄漏等严重问题,使程序出现崩溃等异常情况。 智能指针是 C++ 提供的一种便捷的动态内存管理方式,可以减少我们对内存的手动管理。使用智能指针可以避免内存…

    C 2023年5月22日
    00
  • C语言指向非常量的常量指针

    首先我们需要了解一下指针和常量的概念。 指针是一个变量,存储的是一个地址,指向另一个变量的内存位置。指针可以用来操作、访问被指向变量的值,同时也可以修改该值。而常量则是一种不可变的量,它的值在定义后不会再改变。 常量指针是指一个指针,它指向的值是不可变的。常量指针可以用来指向常量,它可以通过指针来访问常量的值,但不能通过指针来修改常量的值。 而“指向非常量的…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部