zoukankan      html  css  js  c++  java
  • 51nod 1074 约瑟夫环 V2

    基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题
     收藏
     关注
    N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。
    例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。
    Input
    2个数N和K,表示N个人,数到K出列。(2 <= N <= 10^18, 2 <= K <= 1000)
    Output
    最后剩下的人的编号
    Input示例
    3 2
    Output示例
    3




    函数图形法


    #include<iostream>
    using namespace std;
    unsigned long long n, k;
    
    int main()
    {
        cin >> n >> k;
    
        long long y = k % 2;
        long long x = 2, t = 0;
        long long z1 = y, z2 = x;
        while (x <= n)
        {
            z1 = y;
            z2 = x;
            t = (x - y) / (k - 1);
            if (t == 0)
            {
                t++;
            }
            y = y + t * k - ((y + t * k) / (x + t)) * (x + t);
            x += t;
        }
    
        cout << (z1 + (n - z2) * k) % n + 1 << endl;
    
        return 0;
    }



  • 相关阅读:
    全球疫情可视化
    ListView(1)
    《浪潮之巅》阅读笔记02
    Intern Day12
    Intern Day11
    Intern Day10
    Intern Day10
    Intern Day10
    PTA1065
    Intern Day10
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387176.html
Copyright © 2011-2022 走看看