首页 > 其他分享 >3254:约瑟夫问题No.2C

3254:约瑟夫问题No.2C

时间:2024-01-17 21:12:05浏览次数:42  
标签:head tem int 3254 next No.2 front 约瑟夫 qlist

做个循环列表就行了。

逻辑上想想还是很简单的。

然而在实践的时候需要考虑许多边界情况。每次循环的时候要考虑头节点的问题。

#include<stdio.h>
#include<stdlib.h>
struct node{
    int data;
    struct node* next;
};
typedef struct node qlist;

int main(){
    qlist* head=(qlist*)malloc(sizeof(qlist));
    head->data=-1;
    head->next=head;
    qlist* front=head;
    qlist* tail=front;
    int n,q,m;
    while(scanf("%d %d %d",&n,&q,&m) != EOF){
        if(n==0) break;
        for(int i=1;i<=n;i++){
            qlist* tem=(qlist*)malloc(sizeof(qlist));
            tem->data=i;
            if(front==head){
                head->next=tem;
                tem->next=head;
                tail=tem;
                front=tem;
            }else{
                tail->next=tem;
                tem->next=head;
                tail=tem;
            }
        }
        qlist* x =head;
        while(front->data!=q){
            x=front;
            front=front->next;
        }
        int flag=0;
        while(head->next!=head){
            for(int i=1;i<m;i++){
                x=front;
                front=front->next;
                if(front==head) {
                    x=front;
                    front=front->next;
                }
            }
            if(!flag){
                printf("%d",front->data);
                flag=1;
            }else{
                printf(",%d",front->data);
            }
            qlist* tem2=front;
            x->next=front->next;
            front=front->next;
            if(front==head){
                front=front->next;
            }
            free(tem2);
        }
        printf("\n");
    }
    return 0;
}

结果如下:

标签:head,tem,int,3254,next,No.2,front,约瑟夫,qlist
From: https://www.cnblogs.com/llllmz/p/17971193

相关文章

  • 3254:约瑟夫问题No.2C++
    \这题思路还是挺多的。如果用数学的角度考虑。知道了n,p,m自然就知道下一个要出队的人的编号。然后一个个输出就行了。还可以用循环链表做。还可以用队列。出队在入队。#include<iostream>#include<queue>usingnamespacestd;intmain(){intn,p,m;while(......
  • P1145 约瑟夫
    题目链接:考虑使用循环链表来维护该环形数据结构。但下列代码只能通过70/100#include<bits/stdc++.h>usingnamespacestd;intne[50];intmain(){ intk,n,m; boolflag=true; cin>>k; n=2*k,m=k+1; for(inti=1;i<n;i++)ne[i]=i+1;......
  • 有没有一捏 约瑟夫环
    7-5有没有一捏题目背景一个神秘的数字解码器被用来识别和分析城市监控系统中的加密信号。这些信号用二进制代码表示,二进制值代表了不同类型的安全信息,当二进制值的最后一位为0时,代表该信号是安全的,不会造成网络威胁,如果最后一位是1的,则该信号是1,有潜在的网络威胁。作为一名......
  • 约瑟夫(环形链表)
    约瑟夫(环形链表)/***@author缪广亮*@version1.0*/classJoseph{publicstaticvoidmain(String[]args){CircleSingleLinkedListcircleSingleLinkedList=newCircleSingleLinkedList();circleSingleLinkedList.addBoy(5);circ......
  • 算法:约瑟夫环问题
    问题描述:n个人围成一圈,从编号为k的人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,求最后一个出圈的人 /**@paramarrarray值为range(1,总人数)*@parammint报号到m的人出圈*@paramcurrentint从第current+1个人开始喊1;值为k-1*@return......
  • 连载随笔:VBA工具No.2:APOX输入数据辅助制作工具
     一、需求背景        2009年,3G(TD-SCDMA)工程大规模上线,无线网络规划工程师在进行TD-SCDMA无线网络仿真工作中,经常为制作APOX(中国移动设计院的3G仿真软件)仿真输入数据伤浪费了宝贵的时间。    通过APOX输入数据辅助制作工具工具可快速实现仿真输入数据格......
  • 算法题:约瑟夫环问题
    原题:N个人围成一圈顺序编号,从1号开始按1、2、3…顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。请按退出顺序输出每个退出人的原序号。输入格式:输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。输出格式:按退出顺序输出每个......
  • 大二算法实验一用循环链表解决约瑟夫环
    题目约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的......
  • Linux操作系统 no.2
    一.用户/组:1.创建用户、组:  useradd  groupadd2.删除用户:  userdel3.修改用户密码:  passwd 二.文件权限:chowm:修改文件属主,属组。chgrp:修改文件属组。chmod: 修改文件权限。 chowm:改变文件属性chmod:改变文件访问方式  r(读取)  w(写入)  x(执......
  • 约瑟夫环问题
    我今天要讲的问题是约瑟夫环问题。本蒟蒻第一篇学术文章,多多支持,写的不好请见谅。洛谷题库约瑟夫环问题这题是一道好题目,我这里推荐两种解法1.直接模拟我用了一个数组来模拟,在圈内为无穷大,不在圈内则为0。模拟时要注意以下几点:如果当前已经出了圈,那么这个位置不算一人。......