अशुभ नंबर (नहीं होमवर्क)अशुभ नंबर
कुछ संख्या अशुभ माना जाता (यह केवल 4 और 7 होता है) कर रहे हैं। हमारा लक्ष्य सकारात्मक पूर्णांक ए और बी की सीमा में ऐसी संख्याओं की गिनती को ढूंढना है।
उदाहरण के लिए:
इनपुट: एक = 10 ख = 20
आउटपुट: 0
इनपुट: एक = 30 ख = 50
आउटपुट: 2 (44, 47)
नीचे कोड मैंने कोशिश की है एक स्थिर सरणी दृष्टिकोण का उपयोग करके बाहर, जिसमें मैं शुरुआत में 32-बिट पूर्णांक के लिए सभी संभावित दुर्भाग्यपूर्ण संख्याओं की गणना करता हूं। यह ओ (एन) में किया जाता है और बाद में एक अनुक्रमिक स्कैन गिनती प्राप्त करने में मदद करता है जो एक ओ (एन) ऑपरेशन है। क्या स्थैतिक सरणी की सहायता के बिना इसे हल करने के लिए कोई बेहतर तरीका है?
#define MAX_UNLUCKY 1022
static int unlucky[MAX_UNLUCKY];
int main(int argc, char **argv) {
int i, j, k;
int a, b, factor;
printf("Enter the numbers : \n");
scanf("%d",&a);
scanf("%d",&b);
unlucky[0] = 4;
unlucky[1] = 7;
factor = 10;
k = 1;
for(i = 2; i < MAX_UNLUCKY; ++i)
unlucky[i] = unlucky[(i >> 1) - 1]*factor + unlucky[k ^= 1];
for (i = 0; i < MAX_UNLUCKY;++i)
if (unlucky[i] > a) break;
for (k = i; k < MAX_UNLUCKY;++k) {
if (unlucky[k] > b) break;
printf("Unlukcy numbers = %d\n", unlucky[k]);
}
printf ("Total Number of Unlucky numbers in this range is %d\n", k-i);
return (0);
}
माइनर अनुकूलन टिप्पणी है: अपने दृष्टिकोण 'कश्मीर = 1;' [.. ।] '+ दुर्भाग्यपूर्ण [k^= 1]; 'अनुक्रम उत्पन्न करने के लिए' 4,7,4,7,4 ...' एक सरणी लुकअप का उपयोग कर रहा है जिसे आप 'k = 7;' जैसे कुछ का उपयोग करके हटा सकते हैं। [ ...] '+ (के = 11 - के)'। – schnaader
यह होमवर्क है? –
मुझे यकीन है कि यह 'लॉग (एन)^के' समय और स्थान (छोटे स्थिर के साथ) में संभव है, लेकिन मैं वास्तविक के गणना करने के लिए बहुत आलसी हूं)। आपको केवल गिनती की गणना करने की आवश्यकता है, आपको उन सभी को गिनने की आवश्यकता नहीं है। आप इसका उपयोग कर सकते हैं कि संख्या 10^एन के नीचे 2^एन दुर्भाग्यपूर्ण संख्याएं हैं। – CodesInChaos