c语言(约瑟夫环算法问题)

如下第一段代码是书上抄下来的,检查和书写的一样,但是运行结果会出错,请问错在哪了?

#include "stdio.h"

int main()
{
	int person[100];
	int i, j;
	int arrayLen; // s数组长度
	int start, N; // 开始位置,报数大小
	int deleNum;  // 出列人数组下标
	int name, M;  // 输入时,人的信息,总人数
	printf("请输入圆桌上人的总数:");
	scanf("%d,&arrayLen");
	printf("\n");
	printf("请输入每个人的信息(整数):\n");
	for (i = 0; i < arrayLen; i++)
	{
		scanf("%d", &name);
		person[i] = name;
	}
	printf("请输入的数据的顺序为:\n");
	for (i = 0; i < arrayLen - 1; i++)
		;
	printf("%d\n", person[arrayLen - 1]);
	printf("你打算从第几个开始报数?");
	scanf("%d", &start);
	start = start - 1;
	printf("请输入报数为多少时出圈?");
	scanf("%d", &N);
	printf("\n");
	M = arrayLen;
	printf("程序运行后,出列人的顺序为:\n\n");
	for (i = 0; i < M; i++)
	{
		if (arrayLen == 1)
			printf("%d", person[0]);
		else
		{
			deleNum = (start + N - 1) % arrayLen;
			printf("%d==>", person[deleNum]);
			for (j = deleNum; j < arrayLen; j++)
				person[j] = person[j + 1];
			start = deleNum;
			arrayLen = arrayLen - 1;
		}
	}
	printf("\n\n");
	return 0;
}

出错运行结果如下:

第二段代码运行正常,

#include <stdio.h>

int main()
{
    int person[100];
    int i, j;
    int arrayLen; // 数组长度
    int start, N; // 开始位置,报数大小

    // 输入圆桌上人的总数
    printf("请输入圆桌上人的总数:");
    scanf("%d", &arrayLen);
    printf("\n");

    // 输入每个人的信息(整数)
    printf("请输入每个人的信息(整数):\n");
    for (i = 0; i < arrayLen; i++)
    {
        scanf("%d", &person[i]);
    }

    // 输入报数起始位置和报数大小
    printf("你打算从第几个开始报数?");
    scanf("%d", &start);
    start = start - 1; // 转换为数组下标
    printf("请输入报数为多少时出圈?");
    scanf("%d", &N);
    printf("\n");

    printf("程序运行后,出列人的顺序为:\n\n");
    for (i = 0; i < arrayLen; i++)
    {
        if (arrayLen == 1)
        {
            printf("%d", person[0]);
        }
        else
        {
            int deleNum = (start + N - 1) % arrayLen;
            printf("%d ==> ", person[deleNum]);

            // 移除出列的人
            for (j = deleNum; j < arrayLen - 1; j++)
            {
                person[j] = person[j + 1];
            }

            arrayLen = arrayLen - 1;
            start = deleNum;
        }
    }
    printf("\n\n");
    return 0;
}

运行如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值