最少硬幣問題(c語言實現)

2021-09-25 04:40:52 字數 1619 閱讀 8417

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和可以使用的各種面值的硬...