鱼C论坛

 找回密码
 立即注册
查看: 1392|回复: 15

[已解决]约瑟夫问题

[复制链接]
发表于 2022-12-3 17:23:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
微信图片_20221203171930.jpg 微信图片_20221203171712.jpg


#include <stdio.h>
#include <stdlib.h>

struct node{
        int date;
        node *next;
};
int main(){
        int n,m;
        scanf("%d %d",&n,&m);
        node *head,*p,*now,*prev;
        head = (node *)malloc(sizeof(node));
        head->date = 1;head->next = NULL;
        now = head;
        for(int i=2;i<=n;i++){
                p = (node *)malloc(sizeof(node));
                p->date=i;p->next = NULL;
                now->next = p;
                now = p;
        }
        now->next = head;
        now = head,prev = head;
        while((n--)>1){
                for(int i=1;i<m;i++){
                        prev = now;
                        now = now->next;
                }
                printf("%d ",now->date);
                prev->next = now->next;
                free(now);
                now = prev->date;
        }
        printf("%d",now->date);
        free(now);
        return 0;
}

为什么我把他换成c语言的他就出问题啦 屏幕截图 2022-12-03 172124.png c语言还不太懂有谁知道吗
最佳答案
2022-12-4 12:45:32
沃斯戈-莎比 发表于 2022-12-3 18:04
为什么我看不到回复啊

可以设置最佳了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-3 17:31:58 | 显示全部楼层

回帖奖励 +30 鱼币

C语言中结构体类型前要加 struct
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 17:36:53 | 显示全部楼层
【对管理员说的话:别删这个帖子,好吗

你把所有的 node 前面都加上 struct,就像这样:
#include <stdio.h>
#include <stdlib.h>

struct node{
        int date;
        struct node *next;
};
int main(){
        int n,m;
        scanf("%d %d",&n,&m);
        struct node *head,*p,*now,*prev;
        head = (struct node *)malloc(sizeof(struct node));
        head->date = 1;head->next = NULL;
        now = head;
        for(int i=2;i<=n;i++){
                p = (struct node *)malloc(sizeof(struct node));
                p->date=i;p->next = NULL;
                now->next = p;
                now = p;
        }
        now->next = head;
        now = head,prev = head;
        while((n--)>1){
                for(int i=1;i<m;i++){
                        prev = now;
                        now = now->next;
                }
                printf("%d ",now->date);
                prev->next = now->next;
                free(now);
                now = prev->next; //这里应该是 prev -> next,不应还是 prev -> date
        }
        printf("%d",now->date);
        free(now);
        return 0;
}
这是C语言的语法,没办法,但是你还可以这么做,就是用typedef关键字:
#include <stdio.h>
#include <stdlib.h>

typedef struct node{
        int date;
        struct node *next; //但是这里还要加 struct
} node;
int main(){
        int n,m;
        scanf("%d %d",&n,&m);
        node *head,*p,*now,*prev;
        head = (node *)malloc(sizeof(node));
        head->date = 1;head->next = NULL;
        now = head;
        for(int i=2;i<=n;i++){
                p = (node *)malloc(sizeof(node));
                p->date=i;p->next = NULL;
                now->next = p;
                now = p;
        }
        now->next = head;
        now = head,prev = head;
        while((n--)>1){
                for(int i=1;i<m;i++){
                        prev = now;
                        now = now->next;
                }
                printf("%d ",now->date);
                prev->next = now->next;
                free(now);
                now = prev->next;
        }
        printf("%d",now->date);
        free(now);
        return 0;
}

评分

参与人数 1荣誉 +1 收起 理由
hamletroy + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-12-3 18:04:00 | 显示全部楼层
为什么我看不到回复啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 18:10:08 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>

typedef struct node { // <------------------------------------------------ 注意这里
    int date;
    struct node* next; // <------------------------------------------------ 注意这里
}node; // <------------------------------------------------ 注意这里

int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    node* head, * p, * now, * prev;
    head = (node*)malloc(sizeof(node));
    head->date = 1; head->next = NULL;
    now = head;
    for (int i = 2; i <= n; i++) {
        p = (node*)malloc(sizeof(node));
        p->date = i; p->next = NULL;
        now->next = p;
        now = p;
    }
    now->next = head;
    now = head, prev = head;
    while ((n--) > 1) {
        for (int i = 1; i < m; i++) {
            prev = now;
            now = now->next;
        }
        printf("%d ", now->date);
        prev->next = now->next;
        free(now);
        now = prev->date;
    }
    printf("%d", now->date);
    free(now);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 18:26:14 | 显示全部楼层
本帖最后由 咦一哈呦呦 于 2022-12-3 18:28 编辑


那个 是我用的DEVc++的问题吗还是和之前的问题一样,就一样的错误   啊呀忘记换号了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-3 18:56:10 | 显示全部楼层


我会了我打错了一个东西我是莎比吗   now = prev->next 怎么会是date呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 19:50:10 | 显示全部楼层
这啥书啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-3 20:44:41 | 显示全部楼层

算法竞赛  罗勇军、郭卫斌
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-3 20:46:15 | 显示全部楼层
沃斯戈-莎比 发表于 2022-12-3 20:44
算法竞赛  罗勇军、郭卫斌

楼主也是搞竞赛嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-3 22:14:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-4 11:00:35 | 显示全部楼层
沃斯戈-莎比 发表于 2022-12-3 18:04
为什么我看不到回复啊

现在好了,再看看?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-4 11:01:13 | 显示全部楼层

你也打竞赛,加个好友呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-4 12:45:32 | 显示全部楼层    本楼为最佳答案   
沃斯戈-莎比 发表于 2022-12-3 18:04
为什么我看不到回复啊

可以设置最佳了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表