主题:[讨论]求助,一道经典算法题
活着的人
[专家分:0] 发布于 2009-09-27 16:41:00
有一个有序递增的数列,如果x是数列元素,则2*x+1与3*x+1也是元素。设1是元素,输出前100项
。如前7是:1、3、4、7、10、13、15
回复列表 (共3个回复)
沙发
yansheng [专家分:1530] 发布于 2009-09-27 19:11:00
#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;
}
本菜鸟写的程序!望大家指导!我来抛砖引玉!
板凳
nuciewth [专家分:670] 发布于 2009-09-29 16:44:00
原型就是队列.取出队列头元素输出并将2*x+1,3*x+1进对列,直到输出100个
3 楼
活着的人 [专家分:0] 发布于 2009-09-29 17:34:00
谢谢上面的仁兄了,不过我想出了一个号的方法啦
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;
}
我来回复