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;
}
相关推荐
雪碧聊技术10 分钟前
动态规划算法—01背包问题
算法·动态规划
bu_shuo13 分钟前
c与cpp中的argc和argv
c语言·c++·算法
普贤莲花18 分钟前
【2026年第29周---写于20260718】---整理,断舍离
程序人生·算法·生活
Reart43 分钟前
Leetcode 674.最长连续递增序列 (719)
后端·算法
Aurorar0rua44 分钟前
CS50 x 2024 Notes Algorithms - 02
c语言·开发语言·学习方法
Reart1 小时前
Leetcode 300.最长递增子序列(719)
算法
可编程芯片开发1 小时前
VSG虚拟同步发电机simulink建模与仿真
算法
en.en..1 小时前
冒泡排序与选择排序完整对比解析
开发语言·数据结构·算法·c#·排序算法
兰令水1 小时前
hot100【acm版】【2026.7.18打卡-java版本】
java·开发语言·算法
Reart1 小时前
Leetcode 714.买卖股票的最佳时机含手续费(719)
后端·算法