sdnu oj 1263 C语言程序设计教程(第三版)课后习题10.5 约瑟夫环

为什么要找规律,,,这不是链表的课后题么2333
几天后, 找规律的确简单啊,链表普普通通,,,所以链表做法往下看, 漂亮的规律做法 点这里

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <math.h>
#include <algorithm>
#include <queue>
#include <map>
#define mod 1000000007
using namespace std;

typedef long long ll;
const int N = 106;
const long long inf = 0x3f3f3f3f;
const double eps = 1e-5;
const double pi = acos(-1);

struct node
{
    int num;
    struct node *next;
};

node * creat(int n)   //建表
{
    int i;
    node *head, *pre;
    head = (node*)malloc(sizeof (node));    
    head -> num = 1;
    pre = head;
    for(i = 2; i <= n; ++i)
    {
        node *p = (node*)malloc(sizeof (node)); //千万记得申请新空间
        p -> num = i;
        pre -> next = p;
        pre = p;
    }
    pre -> next = head;         //连成环
    return head;
}

int main()
{
    int n;
    scanf("%d", &n);
    node *head = creat(n);
    node *p, *pre;
    pre = p = head;
    int cnt = 1;
    while(p -> next)
    {
        ++cnt;
        p = p -> next;
        if(cnt == 3)
        {
            cnt = 1;
            node * tp = p;
            p = p -> next;
            delete tp;            //删掉这个点
            pre -> next = p;      //连上
        }
        if(pre == p)              //此时只有一个结点
            break;
        pre = p;
    }
    printf("%d\n", pre -> num);
    return 0;
}

发布了40 篇原创文章 · 获赞 4 · 访问量 1121

猜你喜欢

转载自blog.csdn.net/xiongshuxian2019/article/details/104495037
今日推荐