5 条题解

  • 2
    @ 2023-11-6 20:06:55

    直接从最后一个人逆向往回筛。

    #include <stdio.h>
    
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while (t--)
      {
    	int m,n,i,a=0;
    //m是人数,i是剩余人数,n是报号
        scanf("%d %d", &m, &n);
        for (i = 1; i <= m; i++)
        {
            a = (a + n) % i;//从零开始记录每次过滤报号的人数,不能大于当前剩余人数
    //当i==m时,逆着看就是每次都在去除一次报号n的人,直到把人数筛的没有人    
    //那再多一个人就是剩下的人了
         }    
    printf("%d\n", a + 1);  }    
    return 0;
    }
    

    信息

    ID
    198
    时间
    3000ms
    内存
    128MiB
    难度
    4
    标签
    (无)
    递交数
    325
    已通过
    160
    上传者