| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 896 人关注过本帖
标题:请求一个算法问题
只看楼主 加入收藏
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
 问题点数:0 回复次数:9 
请求一个算法问题
求第1500个只有2,3,5因子的数
数是从小到大排列
如:第一个数是1,1=2^0*3^0*5^0
搜索更多相关主题的帖子: 算法 请求 
2006-10-08 22:29
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
C区已经写了个了,楼主看看可以不.

倚天照海花无数,流水高山心自知。
2006-10-09 22:14
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 

用队列做


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-10-13 10:33
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
以下是引用nuciewth在2006-10-9 22:14:54的发言:
C区已经写了个了,楼主看看可以不.

在哪呢?
找不到


2006-10-14 11:35
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

刚从网上找到的,下午好好看看
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

long number[1600];
char accFlag = 0;
long *pf2 = 0;
long *pf3 = 0;
long *pf5 = 0;

int main()
{
int n;
long max;
long next2, next3, next5;
double t1, t2;

t1 = clock();
number[1] = 1;
pf2 = pf3 = pf5 = number + 1;
next2 = 2;
next3 = 3;
next5 = 5;
for(n = 2; n <= 1500; ++n)
{
max = next2;
accFlag = 1;
if ( next3 < max )
{
max = next3;
accFlag = 2;
}
else if ( next3 == max )
{
accFlag |= 2;
}
if ( next5 < max )
{
max = next5;
accFlag = 4;
}
else if ( next5 == max )
{
accFlag |= 4;
}
number[n] = max;
if ( accFlag & 1 )
{
++pf2;
next2 = *pf2 * 2;
}
if ( accFlag & 2 )
{
++pf3;
next3 = *pf3 * 3;
}
if ( accFlag & 4 )
{
++pf5;
next5 = *pf5 * 5;
}
}
t2 = clock();
printf("Answer = %ld\n", number[1500]);
printf("Total: %f seconds\n", (t2-t1)/CLK_TCK);
return 0;
}


2006-10-14 11:39
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
楼上的算法是错误的,不过很接近正确算法,只是考虑的不完全,(不相信的话可以求第10个数试试,顺序是1,2,3,4,5,6,8,9,10,12
稍微改一下,加上
next6 = 6;
next10 = 10;
next15 = 15;
这三种情况就行了,不过long int 型绝对存储不下最后的结果
解决这个问题我想出了两种算法,一种就是象楼上的那样,不过这种比较麻烦,恐怕还要解决超常整数存储的问题,另一种就简单多了,纯粹的数学运算,只需要注意运算精度就可以了,不过现在没时间了,我要下机了,改天再给出来

我的征途是星辰大海
2006-10-25 14:57
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

//nuciewth 写的代码,稍微改了下,运算时间有点长稍微等一会

#include<stdio.h>

int main()
{
int n,num,i,j,k,count=0;
for(num=1;count<=1500;num++)
{
i=0,j=0,k=0;
n=num;
while(n%2==0)
{
n/=2;
i++;
}
while(n%3==0)
{
n/=3;
j++;
}
while(n%5==0)
{
n/=5;
k++;
}
if(n==1)
count++;
}
printf(\"第1500个数是:%d=2^%d*3^%d*5^%d\n\",num,i,j,k);
return 0;
}


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-25 18:45
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 

讲个构造的算法吧.
设所要求的数生成的队列是q。p1=2,p2=3,p3=5;
开一个数组m[4][4].
m[1][1..3]存储p1,p2,p3,
m[2][1...3]是指向q中数字的指针,
m[3][j]=m[1][j]]*q[m[2][j]]。
这样,最初q[1]=1,m[2][i]=1(1<=i<=3),然后在m[3][i](1<=i<=3)里选一个最小的,存储到队列里去.
并且假设选中的是m[3][k],那么m[2][k]++,(使指针志向下一个),更新m[3][k],m[3,k]=m[1,k]*q[m[2,k]].
如此循环下去。如果m[3][i](1<=i<=3)中有相等的怎么办?那么把所有的等于最小值的m[3][k]都选出来,全部m[2][k]++; 并更新全部m[3][k],m[3,k]=m[1,k]*q[m[2,k]].
这样算法的时间复杂度几乎是O(n)的.
其实这道题的实质还是动态规划..........


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-10-25 19:08
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用cwande在2006-10-25 19:08:35的发言:

讲个构造的算法吧.
设所要求的数生成的队列是q。p1=2,p2=3,p3=5;
开一个数组m[4][4].
m[1][1..3]存储p1,p2,p3,
m[2][1...3]是指向q中数字的指针,
m[3][j]=m[1][j]]*q[m[2][j]]。
这样,最初q[1]=1,m[2][i]=1(1<=i<=3),然后在m[3][i](1<=i<=3)里选一个最小的,存储到队列里去.
并且假设选中的是m[3][k],那么m[2][k]++,(使指针志向下一个),更新m[3][k],m[3,k]=m[1,k]*q[m[2,k]].
如此循环下去。如果m[3][i](1<=i<=3)中有相等的怎么办?那么把所有的等于最小值的m[3][k]都选出来,全部m[2][k]++; 并更新全部m[3][k],m[3,k]=m[1,k]*q[m[2,k]].
这样算法的时间复杂度几乎是O(n)的.
其实这道题的实质还是动态规划..........

楼上的是正解,不过m[3][i]不可能有重复的值,因为2,3,5都是质数


我的征途是星辰大海
2006-10-26 19:27
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
收藏
得分:0 
还是会有相同的值的,比如m[3][i]可以都等于30;
m[3][1]=2*3*5,m[3][2]=3*2*5;m[3][3]=5*2*3(注意顺序)..

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-10-26 22:14
快速回复:请求一个算法问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017887 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved