回 帖 发 新 帖 刷新版面

主题:[讨论]求助,一道经典算法题

有一个有序递增的数列,如果x是数列元素,则2*x+1与3*x+1也是元素。设1是元素,输出前100项
。如前7是:1、3、4、7、10、13、15

回复列表 (共3个回复)

沙发

#include<stdio.h>
int main()
{
    int i=0,j,k,n;
    k=1;
    long a[110];
    printf("请输入数学元素:");
    scanf("%d",&n);
    a[i]=n;
    for(i=1;i<100;i++)
    {
        a[i]=2*a[i-k]+1;
        i++;
        k++;
        a[i]=3*a[i-k]+1;
    }
    for(j=0;j<i;j++)
    {
        printf("%d\t",a[j]);
    }
    return 0;

}
本菜鸟写的程序!望大家指导!我来抛砖引玉!

板凳

原型就是队列.取出队列头元素输出并将2*x+1,3*x+1进对列,直到输出100个

3 楼

谢谢上面的仁兄了,不过我想出了一个号的方法啦


int main()
{
    map<int, int> mp;
    priority_queue<int, vector<int>, greater<int> > q;
    q.push(1);
    mp[1] = 1;
    int used = 0;
while (used+q.size() < 1000)
{
    int curr = q.top();q.pop();
    cout << curr << '\t';
    if (mp[curr*2+1] == 0) q.push(curr*2+1), mp[curr*2+1] = 1;
    if (mp[curr*3+1] == 0) q.push(curr*3+1), mp[curr*3+1] = 1;
    ++used;
}
while (used++ < 1000) printf("%d\t", q.top()), q.pop();
    return 0;

我来回复

您尚未登录,请登录后再回复。点此登录或注册