C语言每日一题—约瑟夫问题

复制代码
13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。要求用结构体编程实现。

***输出提示:"\n出圈成员及顺序:"
***输出格式:"%3d"
***输出提示:"\n最后的成员是:"
***输出格式:"%3d"

1、不用结构体

cpp 复制代码
#include<stdio.h>

int main()
{
    int a[13]={0};
    int i,j=0,n;
    printf("\n出圈成员及顺序:");
    for(i=1;i<=12;i++)
    {
        n=1;
        do
        {
            if(j>12) j=0;
            if(a[j]!=0) j++;
            else
            {
                if(n==3)
                {
                    a[j]=i;
                    printf("%3d",j+1);
                }
                j++;
                n++;
            }
        }while(n<=3);
    }
    printf("\n最后的成员是:");
    for(i=0;i<=12;i++)
    {
        if(a[i]==0)
            printf("%3d",i+1);
    }
    return 0;
}

2、用结构体(参考答案)

cpp 复制代码
#include <stdio.h>

#define	N 13

struct person
{  	 	  		 		 
    int number;
    int nextp;
}link[N + 1];

int main(void)
{  	 	  		 		 
    int i, count, h;

    /* 建立队列 */
    for (i = 1; i <= N; i++)
    {  	 	  		 		 
        if (i == N)
        {  	 	  		 		 
            link[i].nextp = 1;
        }
        else
        {  	 	  		 		 
            link[i].nextp = i + 1;
        }
        link[i].number = i;
    }
    
    count = 0;
    h = N;
    printf("\n出圈成员及顺序:");
    while (count < N - 1)
    {  	 	  		 		 
        i = 0;
        while (i != 3)
        {  	 	  		 		 
            h = link[h].nextp;
            if (link[h].number)
            {  	 	  		 		 
                i++;
            }
        }
        printf("%3d", link[h].number);
        link[h].number = 0;
        count++;
    }

    printf("\n最后的成员是:");
    for (i = 1; i <= N; i++)
    {  	 	  		 		 
        if (link[i].number)
        {  	 	  		 		 
            printf("%3d", link[i].number);
        }
    }

    return 0;
}
相关推荐
qeen871 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
lucas_AI1 小时前
1.2B 小模型赢过 235B 大模型:NaviDC-OCR 把文档解析卷明白了
人工智能·深度学习·算法
程序员与背包客_CoderZ1 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
民乐团扒谱机2 小时前
【微实验】倒谱算法(Cepstrum)深度解析:原理、数学推导与代码实现
人工智能·算法·语音识别
嵌入式阿蔡2 小时前
HAL库 vs LL库 vs 寄存器:到底用哪个?
c语言·stm32·单片机·嵌入式硬件·嵌入式实时数据库
Yyyyyy~3 小时前
【C】C语言常见概念
c语言
Nil2083 小时前
leetcode 189轮转数组
数据结构·算法·leetcode
-dzk-3 小时前
【动态规划】LC 118.杨辉三角
算法·动态规划
恣逍信点3 小时前
《凌微经》静态自悖——变化之自因
人工智能·科技·算法·机器学习·业界资讯·拓扑学·哲学