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;
}
相关推荐
用户4031598639663几秒前
ARP 缓存与报文转发模拟
java·算法
hi0_619 分钟前
03 数组 VS 链表
java·数据结构·c++·笔记·算法·链表
aPurpleBerry19 分钟前
hot100 hot75 栈、队列题目思路
javascript·算法
卷福同学2 小时前
【AI编程】AI+高德MCP不到10分钟搞定上海三日游
人工智能·算法·程序员
mit6.8242 小时前
[Leetcode] 预处理 | 多叉树bfs | 格雷编码 | static_cast | 矩阵对角线
算法
皮卡蛋炒饭.2 小时前
数据结构—排序
数据结构·算法·排序算法
??tobenewyorker3 小时前
力扣打卡第23天 二叉搜索树中的众数
数据结构·算法·leetcode
贝塔西塔3 小时前
一文读懂动态规划:多种经典问题和思路
算法·leetcode·动态规划
众链网络4 小时前
AI进化论08:机器学习的崛起——数据和算法的“二人转”,AI“闷声发大财”
人工智能·算法·机器学习
4 小时前
Unity开发中常用的洗牌算法
java·算法·unity·游戏引擎·游戏开发