24h購物| | PChome| 登入
2009-02-11 21:25:06| 人氣3,758| 回應0 | 上一篇 | 下一篇

ACM 136 Q136: Ugly Numbers

推薦 0 收藏 0 轉貼0 訂閱站台

這一題跟點我很像,一題學會可以寫2題=]

/************************************************************/

  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. main()   
  4. {   
  5.  int a,b;   
  6.  int ans[1501];   
  7.  int g5,g3,g2,m=1;   
  8.  ans[0]=1;   
  9.  for(a=1;a<=1499;a++)   
  10.   {   
  11.    for(g5=a/5;g5<a;g5++)   
  12.     if(ans[g5]*5>m) break;   
  13.    for(g3=g5;g3<m;g3++)   
  14.     if(ans[g3]*3>m) break;   
  15.    for(g2=g3;g2<m;g2++)   
  16.     if(ans[g2]*2>m) break;   
  17.    m=ans[g2]*2;   
  18.    if(m>ans[g3]*3)m=ans[g3]*3;   
  19.    if(m>ans[g5]*5)m=ans[g5]*5;   
  20.    ans[a]=m;      
  21.   }   
  22.  printf("The 1500'th ugly number is %d.",ans[1499]);    
  23.  /*system("pause");*/  
  24.  return 0;   
  25. }  

/******************加速版本 請觀察與上的不同**********/

#include<stdio.h>  
#include<stdlib.h>  
main()  
{  
 int a,b;  
 int ans[1501];  
 int g5=0,g3=0,g2=0,m=1;  
 ans[0]=1;  
 for(a=1;a<=1499;a++)  
  {  
   for(;g5<a;g5++)  
    if(ans[g5]*5>m) break;  
   for(;g3<m;g3++)  
    if(ans[g3]*3>m) break;  
   for(;g2<m;g2++)  
    if(ans[g2]*2>m) break;  
   m=ans[g2]*2;  
   if(m>ans[g3]*3)m=ans[g3]*3;  
   if(m>ans[g5]*5)m=ans[g5]*5;  
   ans[a]=m;     
  }  
 printf("The 1500'th ugly number is %d.",ans[1499]);   
 return 0;  

    台長: 來源不明
    人氣(3,758) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
    全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
    此分類下一篇:ACM 11207 11207 - The easiest way
    此分類上一篇:ACM 443 Humble Numbers

    是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
    * 請輸入識別碼:
    請輸入圖片中算式的結果(可能為0) 
    (有*為必填)
    TOP
    詳全文