本文主要是介绍poj In Danger 约瑟夫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:1-n每数2个便抛弃一个
将十进制转换为二进制,循环左移一位,在转换为十进制,即为解
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, char *argv[])
{int i,n,m,j;while(scanf("%de%d",&n,&m)){ if(n==0 && m==0) break;while(1){if(m==0) break;n*=10;m--;}i=1;while(i<=n){i<<=1; //左移必须有等于号,不然结果错误 }i>>=1;n=(n-i)<<1;printf("%d\n",n+1);}return 0;
}
/*
循环左移方法:
例如n=7=(111)循环结束后i=(1000)i在右移为(100)n-i=(11)为除了首位的数字再将(n-i)右移+1结果便成左移相当于*2 右移/2
*/
这篇关于poj In Danger 约瑟夫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!