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

    N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。
    例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。
    Input
    2个数N和K,表示N个人,数到K出列。(2 <= N, K <= 10^6)
    Output
    最后剩下的人的编号
    Input示例
    3 2
    Output示例
    3

    清楚解析
    http://www.cnblogs.com/kkrisen/p/3569281.html


    用函数表示:

    F(1)=0

    当有2个人的时候(N=2),报道(M-1)的人自杀,最后自杀的人是谁?应该是在只有一个人时,报数时得到的最后自杀的序号加上M,因为报到M-1的人已经自杀,只剩下2个人,另一个自杀者就是最后自杀者,用函数表示:

    F(2)=F(1)+M

    可以得到递推公式:

    F(i)=F(i-1)+M

    因为可能会超出总人数范围,所以要求模

    F(i)=(F(i-1)+M)%i

    1 #include<stdio.h>
    2 int main()
    3 {
    4     int n,k,i,sum=0;
    5     scanf("%d%d",&n,&k);
    6     for(i=1;i<=n;i++)
    7          sum=(sum+k)%i;
    8      printf("%d
    ",sum+1);
    9 }
  • 相关阅读:
    【[AH2017/HNOI2017]礼物】
    【[ZJOI2014]力】
    FFT抄袭笔记
    【[SCOI2015]小凸玩矩阵】
    【[SDOI2017]新生舞会】
    bzoj 3277: 串
    【[ZJOI2015]诸神眷顾的幻想乡】
    【[TJOI2017]DNA】
    【[TJOI2018]碱基序列】
    【[TJOI2018]异或】
  • 原文地址:https://www.cnblogs.com/z-712/p/7375976.html
Copyright © 2011-2022 走看看