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

【题解】约瑟夫问题2

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

【题目描述】

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;
    }
 }


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

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

分享给朋友:

相关文章

【题解】大整数加法

【题目描述】求两个不超过200位的非负整数的和。【输入】有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。【输出】一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么...

【动态规划】完全背包

【题目描述】设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为m,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于m,而价值的和...

【题解】修改回文

【题目描述】如果一个字符串,顺读与倒读的内容一样,称这个字符串为回文。例如 aka 是一个回文,noon 也是一个回文。给定一个字符串,请计算最少需要修改多少个字符,才能...

【题解】最大比例

【题目描述】X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54其等比值为:3...

【题解】分糖果

【题目描述】小A在生日这天收到了哥哥送来的一盒糖果,这盒糖果共有M个,小A要把这盒糖果放到N个盘子中(允许有盘子不放),请问,有多少种不同的放法?请注意:数值相同,顺序不同,我们视为是相同的放法,比如...

猴子吃桃

【题目描述】猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第N天早上想再吃时...