Day4

来源:互联网 发布:知乎每周精选神回复 编辑:程序博客网 时间:2024/04/29 22:55

队列听懂了,wiki上的代码看不懂,不会写……

暴力找奶牛去。

画了一棵完全三叉树,顺序标号作为数组下标,找出层数k和每层首尾标号的关系:

i=(3^(k-1))/2+1;

j=(3^k-1)/2;

每层每3个赋值,值为上层的+1,-1,*2,若上层为-1,则该层三数为-1;

每层扫描目标值,有则输出层数k,超出范围则赋值为-1;

结果,没有结果……

错码如下:



[code=cpp]

#include<stdio.h>
int main()
{
    int a[100000]={0},i,j,k,l,m,n,o,p,q,r=0,s;
    scanf("%d %d",&a[1],&s);
    a[2]=a[1]+1;
    a[3]=a[1]-1;
    a[4]=a[1]*2;
    for(k=3;r!=0;k++)
    {
        n=1;
        for(m=k;m>0;m--)
        {
            n*=3;
        }
        i=(n/3-1)/2+1;
        j=(n-1)/2;
        o=(n/9-1)/2+1;
        p=(n/3-1)/2;
        for(q=o,l=i;l<j;q+=3,l+=3)
        {
            if(a[q]==-1)
            {
                a[l]=-1;
                a[l+1]=-1;
                a[l+2]=-1;
            }
            else
            {
                a[l]=a[q]+1;
                a[l+1]=a[q]-1;
                a[l+2]=2*a[q];
            }
        }
        for(l=i;l<=j;l++)
        {
            if(a[l]==s)
            {
                printf("%d\n",k);
                break;
            }
            if(a[l]<0||a[l]>10000)
                a[l]=-1;
        }
    }


}


[/code]

[code=cpp]
0 0
原创粉丝点击