• Blash数组 c++


     1 //输入一个数作为Blash数组的根,
     2 
     3 //对于该数组的每一个数x,x*2+1 x*3+1均在该数组
     4 //并且该数组没有其他数字
     5 //该数组升序排列
     6 //输入a,n 输出该数组第n个数
     7 //
     8 //
     9 #include <iostream>
    10 #include <algorithm>
    11 void make(int a, int n);
    12 
    13 using namespace std;
    14 int main() {
    15     int a;
    16     int n;
    17     cin>>a>>n;
    18     make(a,n);
    19 
    20     return 0;
    21 }
    22 
    23 void make(int a, int n) {
    24     long long  ans[1000];
    25     ans[1] = a;//数组下标是从1开始的
    26     int rear = 2;//计数器
    27     int two = 1;//设定两个"指针"
    28     int three = 1;
    29     while(rear <= n){
    30         long long t1 = ans[two]*2 + 1;//两个指针分别算出数来
    31         long long t2 = ans[three]*3 + 1;
    32         long long t = min(t1,t2);//找出那个比较小的往答案数组里塞
    33 
    34         if(t1 < t2){
    35             two++;
    36         }
    37         else{
    38             three++;
    39         }
    40         if(t == ans[rear-1])//如果是和上一个答案一样,就continue
    41             continue;
    42         else//如果不一样,那就放进ans数组
    43             ans[rear++] = t;//计数器加一
    44     }
    45     cout<<ans[n];
    46 
    47 }
  • 相关阅读:
    【z02】选择客栈
    JavaEE(22)
    驱动表问题
    影响子查询展开的情况
    SQL*Net message from client
    等值链接和非等值链接
    ||拼接列关联和直接关联区别
    分页SQL优化
    SQL*Net more data to client
    SQL*Net message to client
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/12687677.html
Copyright © 2020-2023  润新知