uva 136

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=24&problem=72&mosmsg=Submission+received+with+ID+11308364

寻找丑数,因子里只有2,3,5的数叫做丑数,找出第1500个丑数,首先想到可以一个一个判断,后来发现TLE了,所以应该从1开始,逐个乘以2,3,5,然后得到不重复的最小数,重复此步骤就可得到结果

View Code
 1 #include<stdio.h>//暴力破解会超时
 2 int min(int a,int b)//输出最小数
 3 {
 4  if(a>=b)
 5    return b;
 6  else return a;
 7 }
 8 int main()
 9 {
10  int a[1501],b[3];
11  int i,j,temp,a1,a2,a3;
12  a[1]=1; 
13  for(i=1;i<=1500;)
14     {
15      for(j=0;j<=i,a[j]*2<=a[i];j++);
16         b[0]=a[j]*2;
17     for( j=0;j<=i,a[j]*3<=a[i];j++);
18         b[1]=a[j]*3;
19     for( j=0;j<=i,a[j]*5<=a[i];j++);
20         b[2]=a[j]*5;//将前面的数依次乘上2,3,5,保留第一个大于那个本身的数
21     a[i+1]=min(b[0],min(b[1],b[2]));
22     i++;//保留最小的
23     }
24  printf("The 1500'th ugly number is %d.\n",a[1500]);
25  return 0;
26 }

 

posted @ 2013-02-19 15:07  执着追求的IT小小鸟  阅读(97)  评论(0编辑  收藏  举报