鱼C论坛

 找回密码
 立即注册
查看: 3632|回复: 11

[已解决]问问 用c语言怎么写

[复制链接]
发表于 2021-5-25 21:48:44 | 显示全部楼层 |阅读模式
3鱼币
约瑟夫环 (用C语言)
N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。
输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。
按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。
输入7 3
输出3 6 2 7 5 1 4
(用c语言)
最佳答案
2021-5-25 21:48:45
如下:
#include <stdio.h>
#include <string.h>
int main()
{
    int p;
    int N;
    int a[3000] = {0};
    int i;
    int j;
    int k = 0;
    printf("请输入N和p\n");
    scanf("%d%d",&N,&p);
    for(i = 0; i < N; i++)
    {
        a[i] = i+1;
    }
    while (N > 0)
    {
        i = (i + p - 1) % N;
        k++;
        printf("%d\t",a[i]);
        for(j = i+1; j < N; j++)
        {
            a[j-1] = a[j];
        }
        N--;
      }
    return 0;
}

最佳答案

评分

参与人数 1鱼币 +5 收起 理由
王之叹息 + 5 无条件支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-25 21:48:45 | 显示全部楼层    本楼为最佳答案   
如下:
#include <stdio.h>
#include <string.h>
int main()
{
    int p;
    int N;
    int a[3000] = {0};
    int i;
    int j;
    int k = 0;
    printf("请输入N和p\n");
    scanf("%d%d",&N,&p);
    for(i = 0; i < N; i++)
    {
        a[i] = i+1;
    }
    while (N > 0)
    {
        i = (i + p - 1) % N;
        k++;
        printf("%d\t",a[i]);
        for(j = i+1; j < N; j++)
        {
            a[j-1] = a[j];
        }
        N--;
      }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-25 23:36:24 | 显示全部楼层

格式错误 显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-25 23:40:59 | 显示全部楼层

数据输出时还要有个换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-26 07:03:25 | 显示全部楼层
1874971845 发表于 2021-5-25 23:40
数据输出时还要有个换行

大锅 那这也算解决了吧,我再给你送个鱼币(疯狂暗示)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-26 07:04:20 | 显示全部楼层


给我个最佳呗大锅


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-26 13:57:48 | 显示全部楼层

给了 大哥我就是就是想知道咋改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-26 14:08:47 | 显示全部楼层
1874971845 发表于 2021-5-26 13:57
给了 大哥我就是就是想知道咋改

好吧,你再说清楚点,这不跟你举得例子基本一样吗,格式是哪里错误了,你的意思是按完7 3连回车都不按直接显示一串数字吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-26 19:50:54 | 显示全部楼层
王之叹息 发表于 2021-5-26 14:08
好吧,你再说清楚点,这不跟你举得例子基本一样吗,格式是哪里错误了,你的意思是按完7 3连回车都不按直 ...

相隔一个空格 行尾无空格 但有一个换行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-26 19:52:34 | 显示全部楼层
1874971845 发表于 2021-5-26 19:50
相隔一个空格 行尾无空格 但有一个换行

求求了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-26 20:11:43 | 显示全部楼层

第一个:
#include <stdio.h>
#include <string.h>
int main()
{
    int p;
    int N;
    int a[3000] = {0};
    int i;
    int j;
    int k = 0;
    printf("输入");
    scanf("%d%d",&N,&p);
    for(i = 0; i < N; i++)
    {
        a[i] = i+1;
    }
    printf("输出");
    while (N > 0)
    {
        i = (i + p - 1) % N;
        k++;
        printf("%d ",a[i]);
        for(j = i+1; j < N; j++)
        {
            a[j-1] = a[j];
        }
        N--;
      }
    return 0;
}

第二个
#include <stdio.h>
#include <string.h>

int main()
{
    int p;
    int N;

    int a[3000] = {0};
    int i;
    int j;
    int k = 0;
    printf("输入");
    scanf("%d%d",&N,&p);
    printf("输出");
    for(i = 0; i < N; i++)
    {
        a[i] = i+1;
    }
    while (N > 1)
    {
        i = (i + p - 1) % N;
        k++;
        printf("%d ",a[i]);
        for(j = i+1; j < N; j++)
        {
            a[j-1] = a[j];
        }
        N--;



       if(i == N)
        {
            i = 0;
        }
    }
    printf("\n%d", a[i]);
    return 0;
}

再要不然直接把你需要的格式打出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-26 23:52:53 | 显示全部楼层
OK了 OK了 麻烦你了  辛苦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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