1.1題目
演算法實現題3-2 最少硬幣問題
★問題描述:設有n種不同面值的硬幣,各硬幣的面值存於陣列t[1:n]中,現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數存於陣列 coins[l:n]中。
對任意錢數0≤m≤20 001,設計乙個用最少硬幣找錢m的方法。
★演算法設計:對於給定的1≤n≤10,硬幣面值陣列t和可以使用的各種面值的硬幣個數陣列 coins,以及錢數m,0≤m≤20 001,計算找錢m的最少硬幣數。
★資料輸入:由檔案 input.txt提供輸入資料,檔案的第1行中只有1個整數給出n的值,第2行起每行2個數,分別是t[i]和 coins[j]。最後1行是要找的錢數m。
★結果輸出:將計算出的最少硬幣數輸出到檔案 output.txt,問題無解時輸出-1。
輸入檔案示例 輸出檔案示例
input.txt output. txt
3 51 3
2 35 3
1 81.2分析
因為之前的程式使用了貪心演算法,導致更換資料後極有可能誤將區域性最優解當成全域性最優解輸出,為保證結果的正確性,改用遍歷演算法,使用goto語句迴圈遍歷所有可能性。
1.3源**
#include #includevoid sort(int* p, int* q, int n);
int main()
if (i % 2 == 1)
}fscanf_s(fpr, "%d", &m);
s = nn;
printf("共有%d種硬幣\n", s);//除錯用
sort(t, coins, s);
y = m;
s -= 1;
aa: for (i = nn - 1; (i >= 0) && (y != 0); i--)//餘數匹配 }
if (y == 0)
b[f++] = n;
n = 0;
y = m;
s -= 1;
k = t[nn-1];
t[nn-1] = t[s];
t[s] = k;
k = coins[nn - 1];
coins[nn - 1] = coins[s];
coins[s] = k;
while (s != 0)
goto aa;
min = b[0];
for (i = 0; i < f; i++)
if (b[i] < min)
min = b[i];
printf("總方案數為:%d", min);//除錯用
fprintf(fpw, "%d\n", min);
fclose(fpr);
fclose(fpw);
return 0;
}void sort(int* p, int* q, int n)//氣泡排序
}
1.4執行結果
1.5總結
程式設計完成後應使用大量結果或特殊情況進行驗證,以防邊界值出現錯誤。
在檔案的資料較為複雜時,不能熟練掌握對檔案的操作,繼續加油!
最少硬幣問題
問題描述 有n種不同面值的硬幣,各硬幣面值存於陣列t 1 n 現用這些面值的錢來找錢 各面值的個數存在陣列num 1 n 中。程式設計任務 對於給定的1 n 10,硬幣面值陣列 各面值的個數及錢數m,0 m 2001,程式設計計算找錢m的最少硬幣數。input 第乙個數字n,後面n行每行兩個數,面值...
最少硬幣問題
本文內容遵從 cc版權協議 設有n 種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數與面值分別存於陣列coin 1 n 和t 1 n 中。對任意錢數0 m 20001,設計乙個用最少硬幣找錢m的方法,對於給定的1 n 10,硬幣面值陣列t...
最少硬幣問題
問題描述 設有n 種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬 幣來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n 中。對任意錢數0 m 20001,設計乙個用最少硬幣找錢m的方法。程式設計任務 對於給定的1 n 10,硬幣面值陣列t和可以使用的各種面值的硬...