C语言复习---找出报数最后一人

题意:

有n个人围成一圈 顺序排号 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

算法实现:

(一)一种是按照链表数据结构(一)线性表循环链表之约瑟夫环

(二)使用数组实现

复制代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int getLast(int *p, int n)
{
    int count = 0,index=0;
    int i = 0, k = 0;
    while (count<n-1)  //一次处理一个步长,只包含if判断,会简单点
    {
        if (p[i++])
            k++;

        if (k == 3)
        {
            p[i - 1] = 0;
            count++;
            k = 0;
        }

        if (i == n)
            i = 0;
    }

    for (i = 0; i < n; i++)
        if (p[i])
            return p[i];
}

int main()
{
    int n,i;
    int* p;
    printf("input number of person:");
    scanf("%d", &n);
    p = (int*)malloc(n*sizeof(int));

    for (i = 0; i < n; i++)
        p[i] = i + 1;

    i = getLast(p, n);

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

    system("pause");
    return 0;
}
复制代码

 

作者:山上有风景
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

posted @   山上有风景  阅读(1178)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示