当前位置:首页 > 题解目录 > 正文内容

【题解】约瑟夫问题2

亿万年的星光4年前 (2021-12-04)题解目录4756

【题目描述】

M个人围成一圈,每分钟相邻的两个人可以交换位置(只能有一对交换)。求使M个人的顺序颠倒(即每个人左边相邻的人换到右边,右边相邻的人换到左边)所需的最少时间(分钟数)。

【输入描述】

   第一行为测试数据的组数n,以后n行中每行为一个小于32767的正整数,表示M

【输出描述】

对于每组测试数据,输出一个数,表示最少需要的分钟数。

【样例输入】

3
4
5
6

【样例输出】

2
4
6

最原始的约瑟夫问题请点击这里 


【题目分析】

    此题属于找规律题,规律推导过程如下:

  • 首先一个人不需要交换,至少两个人

  • 必须相邻的人交换

  • 只有两个人时,颠倒两个人只需要一次

  • 有三个人时,答案是2


  • 当有四个人时, 这样是需要交换3次。

    但是实际上来说,还有更次数更少的交换方式,比如下面这样: 


    这样的话,我们只需要移动两次就可以了。

  • 同理,继续找规律,


  • 人数需要交换的次数
    21
    32
    42
    54
    66
    7
    9

【参考答案】

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int x,n;
    cin>>n;
    while(n--)
    {
        cin>>x;
        if(x%2==0)
        {
            cout<<(x/2)*(x/2-1)<<endl;
        }
        else
        cout<<(x-1)*(x-1)/4<<endl;
    }
 }


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】01背包

【题目描述】一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。【输入描述】第一...

【题解】区间和

1.区间和(sum.cpp)【描述】输入一个整数Q,进行Q次询问,每次给定两个整数l和r,每一次输出l~r中所有平方数的和 % 1000000007【输入】第一行是一个整数Q后面的Q行每行有...

【题解】山区建小学

【题目描述】政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0<i<...

质数环

【题目描述】有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。为了简便起见,我们规定每个素数环都从1开始。例如,下面就是6的一个素数环。1 4 3...

【题解】找零钱—动态规划

给定一些人民币的面额,数量不限,要求找出金额为m元且人民币张数最少的方案。这个问题既可以是一个贪心问题也可以是一个动态规划的问题。对于现行的人民币面额:1、2、5、10、20、50、100,我们找任何...

【题解】神奇的fans

【题目描述】传说fans是一个数学天才。在他五岁那年,从一堆数字卡片中选出了4张 卡片:5,7,6,8。这4个数字有什么神秘之处呢?如果把这4张卡片自左往右的排成:5,6,7,8。你就会发现:原来这4...