前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >救救约瑟夫和他的朋友

救救约瑟夫和他的朋友

作者头像
喜欢ctrl的cxk
发布2019-11-08 16:14:09
4500
发布2019-11-08 16:14:09
举报
文章被收录于专栏:Don的成长史Don的成长史

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/84444765

题目描述:

在罗马人占领乔塔帕特后,N个犹太人与约瑟夫及他的朋友躲到一个洞中,大家决定宁愿自杀也不要被敌人抓到,于是确定了一个自杀方式,N + 2个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想死去,那么他应该怎样安排他和他的朋友的位置,才能逃脱这场死亡游戏呢?

输入描述:

第一行正整数N(0 < N <= 111111)表示共有N个犹太人(所以加上约瑟夫和他的朋友一共有N+2个人)。

输出描述:

请你告诉约瑟夫和他的朋友,他们在圆圈中的什么位置能够活下来。 输出格式为: 剩下两个人为第I个和第J个。

输入例子:

代码语言:javascript
复制
39

输出例子:

代码语言:javascript
复制
剩下两个人为第16个和第31个

AC代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, LEN;
    cin >> n;
    LEN = n + 2;
    int a[LEN];
    for(int i=0;i<LEN;i++)
    {
        a[i] = 1;   // 数组初始化,1:表示为活着;0:表示自杀;
    }   
    int leftCount = LEN;                // 计数器leftCount:计数剩下的人
    int index = 0,count = 0;            // 1.数组下标index;2.循环计数器count
    while(leftCount>2)   // 当还剩下两个人时
    {                 
        if(a[index] == 1)
        {
            count++;
            if(count == 3)  //计数到3,1.自杀;2.循环计数器count重新开始计数;3.计数器leftCount减1
            {             
                a[index] = 0;
                count = 0;
                leftCount--;
            }
        }
        index++;
        if(index == LEN)
        {
            index = 0;
        }    // 当到数组尾,数组下标index置零,重新开始
    }
    int c = 0,b[2];
    for(int j = 0; j < LEN; j++)  //输出结果
    {             
        if(a[j] == 1)
        {
            b[c] = j+1;
            c++;
        }
    }
    printf("剩下两个人为第%d个和第%d个",b[0],b[1]);
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 输入描述:
  • 输出描述:
  • 输入例子:
  • 输出例子:
  • AC代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档