2015-06-12 9 views
6

से विभाज्य द्वारा गठित खोजें मैं एक साक्षात्कार में निम्नलिखित प्रश्न पूछा गया था और मैं कैसे करना है यहसबसे छोटी संख्या दो अंक दिए गए नंबर

सबसे छोटी संख्या है कि गठन किया जा सकता को खोजने के लिए एक कार्यक्रम लिखें कोई सुराग नहीं था 0 और 9 जो किसी दिए गए नंबर से विभाजित है।
उदाहरण के लिए, दिए गए संख्या है अगर 3 उत्पादन 9, अगर दी गई संख्या 10 आउटपुट है होना चाहिए, अगर दी गई संख्या 2 उत्पादन 90, है 90

मैं इस समाधान ऑनलाइन पाया है, लेकिन मैं नहीं है यह एक बिट समझा: -

public class Smallest0And9DivisibleNumber { 
    public static int find(int divisible) { 
     int bin = 1; 
     while (true) { 
      int res = translate(bin); 
      if (res % divisible == 0) { 
       return res; 
      } 
      bin += 1; 
     } 
    } 

    private static int translate(int bin) { 
     int result = 0; 
     for (int i = Integer.toBinaryString(bin).length(); i > 0; i--) { 
      result *= result != 0 ? 10 : 0; 
      int mask = 1 << (i - 1); 
      result += (bin & mask) == mask ? 9 : 0; 
     } 
     return result; 
    } 

    public static void main(String[] args) { 
     assert find(10) == 90; 
     assert find(99) == 99; 
     assert find(33) == 99; 
     assert find(3) == 9; 
     assert find(333) == 999; 
     assert find(300) == 900; 
     assert find(303) == 909; 
     assert find(3033) == 9099; 
     assert find(3303) == 9909; 
    } 
} 

क्या कोई भी अच्छी समझ या वैकल्पिक समाधान के साथ मदद कर सकता है?

+2

यह बाइनरी संख्या 1, 10, 11, आदि उत्पन्न करता है, 1 के साथ 1 को बदलता है, और विभाजन के लिए परीक्षण करता है। बस इतना ही। –

+1

'System.out.println (ढूंढें (2 9 9))' -> '500075407' –

+0

@TagirValeev इंटीजर ओवरफ़्लो। इसके बजाय 'long' का उपयोग करें और आपको' 90090909909' –

उत्तर

2

द्वारा विभाजित है, यह एक समान दृष्टिकोण है।

कैसे हम इसे मैन्युअल रूप से करना 33 के लिए कार्य करें:

Let's go from the least number which will be? - 0. Is it divisible? No. 

Let's go up a number. 9. Is it divisible? No. 

Again by a number 90. Is is divisible? No. 

Again by a number 99. Is it divisible? Yes. 

के पैटर्न पर नजर डालते हैं।

0 9 90 99 

यह कैसा दिखता है? द्विआधारी! हां, हमारे पास 1 की बजाय 9.

अब मैं 0 से तब तक जाऊंगा जब तक कि मुझे एक संख्या प्राप्त न हो जो बाइनरी के रूप में (1 के साथ 1 को बदलकर) विभाजित करे।

हम

Number Binary 0 And 9 
0  0   0 
1  1   9 
2  10  90 
3  11  99 
4  100  900 
5  101  909 
6  110  990 
7  111  999 

मिल हम सभी नंबरों को जो एक आरोही क्रम में 0 और 9 का उपयोग कर बनाया जा सकता है मिलता है।

+0

आप परिणाम के बारे में हिस्सा खो रहे हैं * सबसे छोटी * संख्या जो शर्तों को पूरा करती है। एल्गोरिदम बाइनरी संख्याओं के साथ * ऊपर * जाकर और पहले को लौटकर खाते में ले जाता है, जो आपको सबसे छोटा बाइनरी नंबर देता है। यह * अनुवादित * संख्याओं के लिए भी मान्य है क्योंकि अनुवाद एक नीरस कार्य है। – mastov

+1

@ मास्टोव अच्छी तरह से मुझे लगता है कि वह उस हिस्से को याद नहीं कर रहा है !! – Junaid

+0

@ जुनाद: क्षमा करें, मुझे यह नहीं दिखाई देता है। – mastov

0

मुझे कल्पना है कि अनुवाद विधि वह है जिसे अधिक स्पष्टीकरण की आवश्यकता है। बस यह "0" और "1" के बजाय "0" और "9" द्वारा रचित "बिन" संख्या का एक बाइनरी प्रतिनिधित्व उत्पन्न कर रहा है। जबकि "ढूंढें" विधि 1 से शुरू हो रही है और जांच कर रही है कि "अनुवाद" द्वारा उत्पन्न संख्या "विभाजित"

संबंधित मुद्दे