【PAT_Basic日记】1005. 继续(3n+1)猜想

#include <stdio.h>
#include <stdlib.h>

/**
逻辑上的清晰和代码上的清晰要合二为一
(1)首先在逻辑上一定要清晰每一步需要干什么,
(2)然后在代码上以逻辑的每一步为单位来实现代码
(3)思维逻辑跟不上时,用调试看看,尽量以电脑编译器的思维去想代码的实现
*/

int my_process(int n)
{
    if(n%2 == 0)
    {
        n=n/2;
    }
    else
    {
        n=(3*n+1)/2;
    }
    return n;
}



int main()
{
    int k;
    int a[100]={0};
    int *p=a;
    int i,j,t;
    int n;
    //input
    scanf("%d",&k);
    for(i=0;i<k;i++)
    {
        scanf("%d",&a[i]);
    }

    //process
    for(i=0;i<k;i++)
    {
        n=a[i];
        while(n != 1)
        {

            n=my_process(n);
            for(j=0;j<k;j++)
            {
                if(p[j]==n)
                {
                    p[j]=1;
                    break;  //break是因为测试例子中没有相同数字
                }
            }
        }
    }


    //sort
    for(i=0;i<k;i++)
        for(j=0;j<k-i;j++)
        {
            if(a[j+1]>a[j])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }

    //output
    printf("%d",a[0]);
    for(i=1;i<k;i++)
    {
        if(a[i]!=1)printf(" %d",a[i]);
    }
    printf("\n");

    return 0;
}

  

posted @ 2015-01-25 11:00  _Leo_H  阅读(166)  评论(0编辑  收藏  举报