2010-08-19 28 views
2

不是一個家庭作業問題,我們還在研究循環在學校 在編程中遇到的挑戰... 開始 數666被認爲是 隱匿「野獸的數字」,是一個很好在所有主要的啓示錄主題大片電影中使用數字。然而, 號碼666不能總是在腳本中使用,所以使用1666等數字代替。讓我們打電話給包含至少三個連續的六個數字的數字。最初的幾個該死的數字是666,1666,2666,3666 ,4666,5666 ...如何查找包含序列666的數字?

鑑於A-1開始的索引n,我的程序應該返回n個獸數量。

定義

  • 類:ApocalypseSomeday
  • 方法:getNth
    • 參數:int
    • 返回:int
    • 方法簽名:int getNth(int n)(一定你的方法是公開的)

約束

  • n110000之間,包括

例子

  1. 2返回:1666
  2. 3返回:2666
  3. 6返回:5666
  4. 187返回:66666
  5. 500返回:166699

不是由教師給定的問題。我在編程挑戰C++中發現它。我迄今取得的進展

public class ApocalypseSomeday 
{ 
    public int getNth(int n) 
    { 
     int i = 0, j = 0,k = 0; 
     int s = 1,c = 1; 
     int r = 666; 
     while (s < n) 
     { 
      k = 0; 
      while ((c % 10000) == 6666 && s < n && k < 10000) 
      { 
       r = c * 10000 - 6000 + k; 
       k++; 
       s++; 
      } 
+0

你會發現,幾乎所有的規劃問題,最終涉及到的數字。 – Oded 2010-08-19 21:23:51

+4

你可以展示你到目前爲止寫的東西嗎?您遇到特定的障礙嗎? – 2010-08-19 21:24:07

+1

顯然你的老師是魔鬼。 – 2010-08-19 21:28:01

回答

1

因爲有沒有提到任何性能限制和輸入的大小是相當小的,最簡單的方法是用蠻力:從1向上計數,並檢查每個號碼,看它是否包含666.當你發現n這樣的數字時,返回你找到的最後一個數字。

最簡單的(但速度慢)的方式來檢查,如果數字中包含666將其轉換爲字符串,並搜索字符串「666」。同樣,由於投入規模有限且缺乏績效限制,這應該足夠了。

使用算術運算進行檢查可能會更快。如果你需要你的程序要儘可能快,你可以預先計算爲n的每個可能值的答案,硬編碼的回答到你的程序

def contains666(x): 
    while x >= 666: 
     if x % 1000 == 666: 
      return True 
     x /= 10 
    return False 

:在Python,你可以不喜歡這樣。然後,您可以通過簡單的索引操作找到任何n的結果。

+0

除了字符串搜索以外,最簡單的方法是什麼? int((x mod 10^n)/ 10 ^(n-3))? – muhmuhten 2010-08-19 21:41:35

+0

@sreservoir:查看更新。 – 2010-08-19 21:46:28

+0

是啊!我問組織者我是否可以使用Python,但C++是我的朋友的常態.... – wiseKID 2010-08-19 21:51:07

0
public class ApocalypseSomeday { 
    public int getNth(int n) { 
      int i = 0, j = 0,k = 0; 
      int s = 1,c = 1; 
      int r = 666; 
      while (s < n) { 
       k = 0; 
       while ((c % 10000) == 6666 && s < n && k < 10000) { 
        r = c * 10000 - 6000 + k; 
        k++; 
        s++; 
       } 
       if (s == n) return r; 
       if (k == 10000) { 
        c++; 
        continue; 
       } 
       k = 0; 
       while ((c % 1000) == 666 && s < n && k < 1000) { 
        r = c * 1000 + k; 
        k++; 
        s++; 
       } 
       if (s == n) return r; 
       if (k == 1000) { 
        c++; 
        continue; 
       } 
       k = 0; 
       while ((c % 100) == 66 && s < n && k < 100) { 
        r = c * 1000 + 600 + k; 
        k++; 
        s++; 
       } 
       if (s == n) return r; 
       if (k == 100) { 
        c++; 
        continue; 
       } 
       k = 0; 
       while ((c % 10) == 6 && s < n && k < 10) { 
        r = c * 1000 + 660 + k; 
        k++; 
        s++; 
       } 
       if (s == n) return r; 
       if (k == 10) { 
        c++; 
        continue; 
       } 
       r = c * 1000 + 666; 
       c++; 
       s++; 
      } 
      return r; 
    } 
} 
0

class ApocalypseSomeday 
{ 
public: 
int getNth(int n) 
{ 
    int cpt = 0; 
    int nbr = 666; 
    while (cpt != n) 
    { 
     if (((nbr % 1000) == 666)) 
     { 
      //printf("nb[%d]:%d\n", cpt, nbr); 
      cpt++; 
      nbr++; 
      continue; 
     } 
     if ((nbr % 10000) - (nbr % 10) == 6660) 
     { 
      //printf("nb[%d]:%d\n", cpt, nbr); 
      cpt++; 
      nbr++; 
      continue; 
     } 
     if ((nbr % 100000) - (nbr % 100) == 66600) 
     { 
      //printf("nb[%d]:%d\n", cpt, nbr); 
      cpt++; 
      nbr++; 
      continue; 
     } 
     nbr++; 
    } 
    return nbr-1; 
} 

};