题目描述

小Y在研究数字的时候,发现了一个神奇的等式方程,他屈指算了一下有很多正整数x满足这个等式,比如1和2,现在问题来了,他想知道从小到大第N个满足这个等式的正整数,请你用程序帮他计算一下。

(表示按位异或运算)

输入描述

第一行是一个正整数,表示查询次数。

接着有T行,每行有一个正整数,表示小Y的查询。

输出描述

对于每一个查询N,输出第N个满足题中等式的正整数,并换行。

输入例子:
4
1
2
3
10
输出例子:
1
2
4
18

-->

[示例1]

输入

4
1
2
3
10

输出

1
2
4
18

思路:

首先我们可以打表,在数据小的情况下找规律:

在1~100之间找出满足规律的数,并转成二进制

--------------------------------

第1个数     1     1                       // 二进制1位的个数为1
第2个数     2     10                     // 二进制2位的个数为1
第3个数     4     100                   // 二进制3位的个数为2
第4个数     5     101
第5个数     8     1000                 // 二进制4位的个数为3
第6个数     9     1001
第7个数     10   1010
第8个数     16   10000               // 二进制5位的个数为5
第9个数     17   10001
第10个数   18   10010
第11个数   20   10100
第12个数   21   10101
第13个数   32   100000             // 二进制6位的个数为8
第14个数   33   100001
第15个数   34   100010
第16个数   36   100100
第17个数   37   100101
第18个数   40   101000
第19个数   41   101001
第20个数   42   101010
第21个数   64   1000000            // 二进制7位的个数为13
第22个数   65   1000001
第23个数   66   1000010
第24个数   68   1000100
第25个数   69   1000101
第26个数   72   1001000
第27个数   73   1001001
第28个数   74   1001010
第29个数   80   1010000
第30个数   81   1010001
第31个数   82   1010010
第32个数   84   1010100
第33个数   85   1010101

--------------------------------

结果我们发现答案在二进制下其位数是满足斐波那契规律的

例:当N等于70时,答案的二进制为:100100010

(1) 70-1-1-1-2-3-5-8-13-21=15

可知1+1+1+2+3+5+8+13+21=55,即9位二进制(第55个数对应100000000)

(2) 15-1-1-1-2-3-8=0

可知1+1+1+2+3+5+8=15,即6位二进制(第15个数对应100010)

(3) 相加可得100100010,转换为十进制即为290

所以得把给定的n拆成几个斐波那契数的和,并标记一下每次用到第几个斐波那契数,每次num加上1<<(pos-1)即可。

得好好学学左移运算符啦!!!!

#include<bits/stdc++.h>
using namespace std;
int main()
{
    ],num,n,d;
    int t,i;

    a[]=a[]=a[]=;
    ;i<;i++)
        a[i]=a[i-]+a[i-];

    cin>>t;
    while(t--)
    {
        cin>>n;
        num=;
        while(n)
        {
            i=;
            while(n>=a[i])
            {
                n-=a[i];
                i++;
            }
            d=;
            num+=(d<<(i-));
        }
        cout<<num<<endl;
    }
    ;
}

【Nowcoder 上海五校赛】1 + 2 = 3?(斐波那契规律)的更多相关文章

  1. 【Nowcoder 上海五校赛】二数(模拟)

    题目描述: 我们把十进制下每一位都是偶数的数字叫做“二数”. 小埃表示自己很聪明,最近他不仅能够从小数到大:2,3,4,5....,也学会了从大数到小:100,99,98...,他想知道从一个数开始数 ...

  2. 【洛谷mNOIP模拟赛Day1】T1 斐波那契

    题目传送门:https://www.luogu.org/problemnew/show/P3938 这题出得特别吼啊~~ 通过打表或者大胆猜想斐波那契数列的一些性质,我们不难发现对于一只兔子$x$,其 ...

  3. 2018年东北农业大学春季校赛 K wyh的数列【数论/斐波那契数列大数取模/循环节】

    链接:https://www.nowcoder.com/acm/contest/93/K来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F( ...

  4. 关于斐波那契数列的一些恒等式 模板 牛客OI测试赛 A 斐波拉契

    牛客A 斐波拉契 链接:https://www.nowcoder.com/acm/contest/181/A来源:牛客网 设f[i]表示斐波那契数论的第i项 f[1]=1,f[2] =1,f[i] = ...

  5. JS实现斐波那契数列的五种方式

    下面是五种实现斐波那契数列的方法 循环   function fibonacci(n){ var res1 = 1; var res2 = 1; var sum = res2; for(var i = ...

  6. Nowcoder 北师校赛 B 外挂使用拒绝 ( k次前缀和、矩阵快速幂打表找规律、组合数 )

    题目链接 题意 : 中文题.点链接 分析 : 有道题是问你不断求前缀和后的结果 Click here 这道题问的是逆过程 分析方法雷同.可参考 Click here ----------------- ...

  7. 2019牛客多校第五场 generator 1——广义斐波那契循环节&&矩阵快速幂

    理论部分 二次剩余 在数论中,整数 $X$ 对整数 $p$ 的二次剩余是指 $X^2$ 除以 $p$ 的余数. 当存在某个 $X$,使得式子 $X^2 \equiv d(mod \ p)$ 成立时,称 ...

  8. nyoj358 取石子(五) 斐波那契博弈

    我写代码找的规律:如果这个n是斐波那契数,那么它是P态,如2,3,5,8..... 找规律的代码: #include <cstdio> #include <cmath> #in ...

  9. noip模拟赛 斐波那契

    分析:暴力分有90,真良心啊. a,b这么大,连图都建不出来,肯定是有一个规律.把每个点的父节点写出来:0 1 1 12 123 12345 12345678,可以发现每一个循环的长度刚好是斐波那契数 ...

随机推荐

  1. OC与JS交互之WebViewJavascriptBridge

    上一篇文章介绍了通过UIWebView实现了OC与JS交互的可能性及实现的原理,并且简单的实现了一个小的示例DEMO,当然也有一部分遗留问题,使用原生实现过程比较繁琐,代码难以维护.这篇文章主要介绍下 ...

  2. Scrapy框架之日志等级和请求传参

    一.Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 1.日志等级(信息种类) ERROR:错误 WARN ...

  3. TopcoderSRM679 Div1 250 FiringEmployees(树形dp)

    题意 [题目链接]这怎么发链接啊..... 有一个 \(n\) 个点的树,每个点有点权(点权可能为负) ,求包含点\(1\)的最 大权连通子图(的权值和) . \(n \leqslant 2500\) ...

  4. Java性能调优实践

    1 导论 JVM主要有两类调优标志:布尔标志和附带参数标志 布尔标志:-XX:+FlagName表示开启,­-XX:-FlagName表示关闭. 附带参数标志:-XX:FlagName=somethi ...

  5. day01-struts框架

    一.框架概述 1.框架的意义与作用: 所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面. 特点:封装了很多细节,程序员在使用的时候会非常简单. 2 ...

  6. js判断一个对象是否为数组

    1,真正的数组的判断方法 javascript中最简单的声明数组方法为: var a = []; 判断是否为数组的最直接的方法为: 复制代码 代码如下: a instanceof Array //tr ...

  7. (阿里巴巴)数据库连接池——Druid (未完持续更新)

    Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...

  8. day010-缓冲流、转换流、序列化流

    1.     缓冲流 又称为高效流.高效流高效的原理:使用缓冲区(数组)临时存储多个数据,减少底层资源的调用次数.从而提高读写速度. 1.1 缓冲流分类 字节缓冲流: BufferedOutputSt ...

  9. 配置一个高效快速的Git环境

    username and email editor difftool and mergetool alias 可以直接修改~/.gitconfig文件,也可以用命令配置一个可以实际使用的高效的Git环 ...

  10. 如何将iso文件安装到VirtualBox里的ubuntu去

    我在Window的virtualbox里安装了一个ubuntu: 默认情况下IDE Secondary Master是空的. 方法1:Devices->Insert Guest Addition ...