में सिक्कों की न्यूनतम संख्या मैंने साइट पर विभिन्न प्रश्नों को देखा है और मैंने निम्न तर्क से इसे लागू करने में कुछ भी नहीं ढूंढ पाया है (इसलिए मुझे उम्मीद है कि यह डुप्लिकेट नहीं है)।गतिशील प्रोग्रामिंग - सी
एक वेंडिंग मशीन नियंत्रक आपके कि आवश्यक परिवर्तन बनाने के सिक्कों की न्यूनतम संख्या की गणना करने के लिए आवश्यक हैं के प्रोग्रामर के रूप में:
समस्या मैं एक सी कार्यक्रम के माध्यम से हल करने के लिए कोशिश कर रहा हूँपीछा कर रहा है ग्राहकों को वापस देने के लिए। इस समस्या का एक कुशल समाधान एक गतिशील प्रोग्रामिंग दृष्टिकोण लेता है, जिसमें 1 सेंट परिवर्तन के लिए आवश्यक सिक्कों की संख्या की गणना करना शुरू होता है, फिर 2 सेंट के लिए, फिर 3 सेंट के लिए, आवश्यक परिवर्तन तक पहुंचने तक और प्रत्येक बार पूर्व गणना का उपयोग करने तक सिक्कों की संख्या। फ़ंक्शन
ComputeChange()
युक्त एक प्रोग्राम लिखें, जो वैध सिक्के और आवश्यक परिवर्तन की एक सूची लेता है। इस कार्यक्रम को बार-बार कंसोल से आवश्यक परिवर्तन के लिए पूछना चाहिए और तदनुसारComputeChange()
पर कॉल करना चाहिए। इसे "कैशिंग" का भी उपयोग करना चाहिए, जहां किसी भी पहले गणना की गई मध्यवर्ती मानों को बाद के लुक-अप के लिए बनाए रखा जाता है।कौन सा मैं पर मेरी कोड के आधार पर करने की कोशिश की:
कैसे दूसरों को इसे हल है खोजने के लिए ऑनलाइन चारों ओर देखने के बाद, मैं निम्न उदाहरण पैसे, nickels और ऑफ डाइम्स के साथ लागू पाया। लेकिन सबसे पहले, मेरा कोड रोक नहीं रहा है, और दूसरी बात, मुझे यकीन नहीं है कि क्या मैं उपरोक्त रूब्रिक में वर्णित कैशिंग तत्व शामिल कर रहा हूं। (मुझे सच में यकीन नहीं है कि मुझे उस हिस्से के बारे में कैसे जाना है)।
क्या कोई मेरे कोड में त्रुटियों को ढूंढने में मदद कर सकता है?
#include <stdio.h>
#include <limits.h>
int computeChange(int[],int,int);
int min(int[],int);
int main(){
int cur[]={1,2,5,10,20,50,100,200};
int n = sizeof(cur)/sizeof(int);
int v;
printf("Enter a value in euro cents: ");
scanf("%d", &v);
printf("The minimum number of euro coins required is %d", computeChange(cur, v, n));
return 0;
}
int computeChange(int cur[], int v, int n){
if(v < 0)
return -1;
else if(v == 0)
return 0;
else{
int possible_mins[n], i;
for(i = 0; i < n; i++){
possible_mins[i]=computeChange(cur, v-cur[i], n);
}
return 1+min(possible_mins, n);
};
}
int min(int a[], int n){
int min = INT_MAX, i;
for(i = 0; i < n; i++){
if((i>=0) && (a[i]< min))
min = a[i];
}
return min;
}
किसी भी सहायता की सराहना की जाएगी।
क्या आपने डीबगर में कोड के माध्यम से लाइन के माध्यम से कदम उठाने का प्रयास किया है? –
@ जोचिमपिलबॉर्ग मेरे पास है, लेकिन चूंकि 'computeChange() 'का प्रयोग लगातार किया जा रहा है, यह थोड़ा उलझन में है। मैं फिलहाल इसे फिर से डिबग कर रहा हूं। –
तो ... यदि आप computeChange() में ब्रेकपॉइंट डालते हैं, तो यह लगातार हिट हो रहा है, यानी। भाग्य रिकर्सन? –