uva 679 小球下落

来源:互联网 发布:专业淘宝食品图片拍摄 编辑:程序博客网 时间:2024/04/30 08:38
方法一#include<iostream>  //应用模拟的方法进行操作,不过要开一个比较大的数组#include<stdio.h>#include<string>#include<string.h>using namespace std;const int maxn = 20; int s[1<<maxn];int main(){    int d,I;    while(scanf("%d%d",&d,&I)==2)    {         memset(s,0,sizeof(s));        int k = 1;        int  n = (1<<d-1)-1;        for(int  i = 1; i <= I;i++)        {            k = 1;            for(;;)            {                s[k]= !s[k];                if(s[k])                k = k * 2;                else                k = k*2+1;                if(k >= n)break;            }        }      printf("%d\n",k);    }    return 0;}方法二解析:题目中只是让你输出第I个球的位置,如果I是奇数时,他是往左走的第(I+1)/2个,如果是偶数时,他是往右走的第I/2个#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int main(){    int D,I;    while(scanf("%d%d",&D,&I)==2)    {        int k = 1;        int n = 1<<D-1;        for(int i= 0; i < D-1; i++ )        {            if(I%2==1)            {                k = k*2;                I =(I+1)/2;            }            else            {                k= k*2+1;                I=I/2;            }        }        cout<<k<<endl;    }    return 0;}
原创粉丝点击