zoukankan      html  css  js  c++  java
  • 计算第k个质因数只能为3,5,7的数

    英文描述:Design an algorithm to find the kth number such that the only prime factors are 3, 5, and 7


    思路:质因数只能为3,5,7,设这个数为val,则val = (3^i)(5^j)(7^n) (i,j,n>=0),显然第1个数为1,第2个为1*3,第3个为1*5,第4个为1*7,第5个为3*3,第6个为3*5,第7个为3*7...

    如果将钱k-1个数组成一个链表r,可以看出,第k个数为3或5或7乘以前k-1个数中的某一个,得到一个还未加入r的最小的数。为了防止过多的循环,我们应对这个最小的数保持记录。

    代码:

     1 #include<queue>
     2 
     3 int findnum(int k)
     4 {
     5     if (k <= 0)
     6         return 0;
     7     int val =1;
     8     queue<int> Q3; Q3.push(3);
     9     queue<int> Q5; Q5.push(5);
    10     queue<int> Q7; Q7.push(7);
    11 
    12     for (k--; k > 0; k--)
    13     {
    14         val = findmin(Q3.front(), Q5.front(), Q7.front());
    15         if (val == Q7.front())
    16             Q7.pop();
    17         else
    18         {
    19             if (val == Q5.front())
    20                 Q5.pop();
    21             else
    22             {
    23                 Q3.pop();
    24                 Q3.push(val * 3);
    25             }
    26             Q5.push(val * 5);
    27         }
    28         Q7.push(val*7);
    29     }
    30 
    31     return val;
    32 }
    33 int findmin(int a, int b, int c)
    34 {
    35     int result = 0;
    36     if (a < b)
    37         result = a;
    38     else result = b;
    39     if (result > c)
    40         result = c;
    41     return result;
    42 }

    我使用了C++ STL模板queue(队列,先入先出),Q3,Q5,Q7分别用来记录上一次最小的数乘以3,5,7的结果,以便以后使用。最小的数一旦使用后,立即出队。

  • 相关阅读:
    html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    javascript,隔行变色,鼠标移入时高亮
    创建DOM元素
    DOM基础,今天感冒了。。
    无缝滚动,JavaScript
    定时器的运用,延时提示框
    JavaScript,数组和函数传参 笔记
    写一下JavaScript的笔记
    swift版本的快排和归并排序
    ios Json数据生成实体类工具
  • 原文地址:https://www.cnblogs.com/WonderHow/p/4564065.html
Copyright © 2011-2022 走看看