椰Ye 2022-12-02 13:08 采纳率: 63.2%
浏览 59
已结题

17个人围成圈,编号为1—17,从第1号开始报数, 报到3的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号

17个人围成圈,编号为1—17,从第1号开始报数, 报到3的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号
/*17个人围成圈,编号为1—17,从第1号开始报数,
报到3的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号。*/
#include<iostream>
using namespace std;
int main() {
    int N = 0; 
    cout << "请输入围成圈的人数" << endl;
    cin >> N;
    int num[100];  //存储参加游戏人数的数组
    int m = 0;  //m为退出人数
    int k = 0;  //k为报数计数
    int i = 1;  
    //用循环对数组赋初值,为符合日常,舍弃下标为0,从1开始计数
    for (i = 1; i < N+1; i++) {
        num[i] = i;
    }
    while( m < N-1 ) {
        if (num[i]!=- 1) {
            k++;
        }
        //报到3则出局,游戏重新开始计数
        if (k == 3) {
            num[i] = -1;
            m++;
            k = 0;
        }
        i++;
        if (i == N + 1) {
            i = 1;//到圈末端就从头重新开始报数
        }
    }
    //找出剩下的那个人
    for (int i = 1; i <N+1; i++) {
        if (num[i] != -1) {
            cout << num[i] << " ";
        }
    }


    system("pause");
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • Minuw 2022-12-02 13:34
    关注

    while循环里面逻辑就不对
    而且你自己都说是3的倍数才退出

    你判断它等于-1是为什么

    if (num[i]!=- 1) {
                k++;
            }
    

    你对数组里面你输入的值没操作
    反而是数组后面的没初始化的值

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月9日
  • 创建了问题 12月2日

悬赏问题

  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含