zoukankan      html  css  js  c++  java
  • 我的有道第二题(不是双倍超立方)

    先说明一下,我遇到的第二题跟大家先前讨论的第二题题目不同,不过最近算法挺火,也就放上来,大家一起讨论讨论,而且我觉得有道这次比赛非常好,我看了下TopCode平台,大家平时也可以进这个平台练习一下算法,不过。。。。有道的翻译还真有待提高了

    声明一下,我算法没有学过,只是想到了解决的方法,当时理解题目花了我很多时间,不知道是我太笨还是题目真有问题,呵呵。废话不说,上题目:

    Problem Statement

          

    一个二进制序列由下面的伪代码生成:

    string A = "0"

    While (A的长度小于等于n)

        创建一个和A一样长度的字符串B

        For i=0,1,...length(A)-1

            If (i 是完全平方数)

                B[i] = 1-A[i]

            Else

                B[i] = A[i]

        A = A + B (即将B拼接在A后面)

    End While

    Return A

    请注意,在上面的伪代码中,A[i]B[i]分别表示字符串AB中下标为i的字符(下标编号从0开始)。对"完全平方数"的定义是,对于整数i,存在整数j,使得i= j *j,则称i为完全平方数。

    下面具体说明序列生成的过程:如果n=7,则在每一轮迭代中,A的取值依次为:0, 01, 0110, 01101010,所以最终产生的二进制序列就是0,1,1,0,1,0,1,0

    请返回上述序列中下标为n的数字(该序列的下标从0开始)

    Definition

          

    Class:

    BinarySequence

    Method:

    getValue

    Parameters:

    int

    Returns:

    int

    Method signature:

    int getValue(int n)

    (be sure your method is public)

          

    Constraints

    -

    n 的取值大于等于0,小于等于2,000,000,000

    Examples

    0)

          

    7

    Returns: 0

    原因参见题目描述。

    1)

    2

    Returns: 1

    2)      

    8

    Returns: 1

    这一次,生成的序列为0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0.

    3)      

    11

    Returns: 0

    4)       

    10

    Returns: 1  

    5)      

    15

    Returns: 0

    头大,乱七八糟一堆东西,看了老半天,最后跟大家一样,来了句,原来如此啊,ok,理解了题目,上代码:

     1public class BinarySequence
     2    {
     3        public int getValue(int n)
     4        {
     5            int result = 0;
     6
     7            string A = "0";
     8
     9            while (A.Length <= n)
    10            {
    11                string[] B = new String[A.Length];
    12                for (int j = 0; j < A.Length; j++)
    13                {
    14                    if (IsSquare(j))
    15                    {
    16                        B[j] = (1 - Convert.ToInt32(A[j].ToString())).ToString();
    17                        result++;
    18                    }

    19                    else
    20                    {
    21                        B[j] = A[j].ToString();
    22                    }

    23                }

    24                A = A + String.Join("", B);
    25                //Console.WriteLine(A);
    26            }

    27
    28            return int.Parse(A[n].ToString());
    29        }

    30
    31        public bool IsSquare(int n)
    32        {
    33            bool result = false;
    34
    35            for (int i = 0; i <= n; i++)
    36            {
    37                if (i * i == n)
    38                {
    39                    return true;
    40                }

    41            }

    42
    43            return result;
    44        }

    45    }

    单纯为了解决方法做的,效率谈不上,性能也不好,不过刚想到一个有趣的解法,准备下午的时候抽空写写,哈哈

    写算法纯粹是为了玩,不是要证明自己如何,大家也不必说算法到底有用无用,有用无用都是根据自己的工作来看的,不过业余时间玩玩算法,真的很好。

    PS:写的不好,希望大家不要乱拍钻

  • 相关阅读:
    cordova 日曆 聯系人 插件使用
    ionic 不同view的數據交互
    JQuery iframe 刷新效果
    fis学习
    如何用nfs命令烧写内核和文件系统(网络下载文件到nandflash)(未完)
    布线的基本原则
    电平转转换电路
    焊盘的制作
    flash-热风焊盘的制作
    焊盘的层面剖析
  • 原文地址:https://www.cnblogs.com/inday/p/1495897.html
Copyright © 2011-2022 走看看