首页 > 技术文章 > Blash数组 c++

zhmlzhml 2020-04-12 21:11 原文

 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 }

 

推荐阅读