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;
}
相关推荐
澈2073 小时前
C++并查集:高效解决连通性问题
java·c++·算法
旖-旎4 小时前
深搜练习(单词搜索)(12)
c++·算法·深度优先·力扣
企客宝CRM5 小时前
2026年中小企业CRM选型指南:企客宝CRM处于什么位置?
android·算法·企业微信·rxjava·crm
橙淮5 小时前
二叉树核心概念与Java实现详解
数据结构·算法
米罗篮5 小时前
DSU并查集 & 拓展欧几里得-逆元
c++·经验分享·笔记·算法·青少年编程
橙淮5 小时前
双指针法:高效算法解题的利器
算法
初心未改HD6 小时前
深度学习之MLP与反向传播算法详解
人工智能·深度学习·算法
刀法如飞6 小时前
【Go 字符串查找的 20 种实现方式,用不同思路解决问题】
人工智能·算法·go
技术小黑7 小时前
CNN算法实战系列03 | DenseNet121算法实战与解析
pytorch·深度学习·算法·cnn