第 k 个数

题目

有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。

思考

  • 这是丑数题
  • 定义3个指针a3,a5,a7, a3指向的数字永远乘以3, a5指向的数字永远乘以5, a7指向的数字永远乘以7
  • 初始化所有指针都指向第一个丑数,即1
  • 从s[a3]*3, a[a5]*5, s[a7]*7选取最小的一个数字作为丑数

代码

int min(int a3, int a5, int a7)
{
    int min = INT_MAX;
    a3 < min ? min = a3 : min;
    a5 < min ? min = a5 : min;
    a7 < min ? min = a7 : min;
    return min;
}
int getKthMagicNumber(int k) {
    if (k == 1)
        return 1;
    int* s = (int*)calloc(k, sizeof(int));
    s[0] = 1;
    int a3, a5, a7;
    a3 = a5 = a7 = 0;
    for (int i = 1; i < k; i++)
    {
        int temp = min(s[a3] * 3, s[a5] * 5, s[a7] * 7);
        if (s[a3] * 3 == temp)
            a3++;
        if (s[a5] * 5 == temp)
            a5++;
        if (s[a7] * 7 == temp)
            a7++;
        s[i] = temp;
    }
    return s[k - 1];
}
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇