我对编码很陌生,所以我确信这是一个愚蠢的问题。对于一个类,我需要编写一个算法来确定在C ++中赚取一些金钱的最小变化量。
此代码需要从txt文件中读取数字,以便第一行是硬币类型(即1美分,2美分,4美分等)。第二行是我想要分类为变化的总数。然后第三行是一组新的硬币类型,第四行是新的总数。一般模式仍在继续。
txt文件看起来像 -
1 2 5
10
1 3 7 12
29
1 2 4 8
15
1 7 11
14
我自己很容易创建了更改算法,我在将第一行读入数组然后将下一行读入变量时遇到问题。
我的coinChange算法代码。
int coinChange(int coins[], int total, int size)
{
//Set high minimum
int min = 999999999;
//For all of the coins, see if it equals the value of total
for (int i = 0; i < size; i++) {
if (coins[i] == total) {
//If so return 1
return 1;
}
}
//Loop through
for (int j = 1; j <= total / 2; j++) {
if ((coinChange(coins, j, size) + coinChange(coins, total - j, size)) < min) {
min = coinChange(coins, j, size) + coinChange(coins, total - j, size);
}
}
return min;
}
我尝试过使用fgets和fscanf没有成功,所以任何建议都会非常有用。
答案 0 :(得分:1)
如果您使用c ++作为tadman已经评论过,您可以使用类似的东西:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int main()
{
std::stringstream ss("1 2 5\n10\n1 3 7 12\n29\n");
std::string line;
while(std::getline(ss, line))
{
std::stringstream lines(line);
std::vector<int> values;
std::string string_value;
while(std::getline(lines, string_value, ' '))
values.push_back(std::stoi(string_value));
std::getline(ss, line);
int value = std::stoi(line);
std::cout << "got: ";
for(const auto& v : values) std::cout << v << ", ";
std::cout << value << std::endl;
}
return 0;
}
在这里试试http://cpp.sh/33bmy。
答案 1 :(得分:0)
这将读取一个完整的行并使用std::istringstream
拆分硬币类型。下一行的总金额是以通常的方式提取的。
我更改了您的功能签名以获取indexPathForItem(at:)
和std::vector
。如果您将int
替换为size
,则大部分代码应保持不变。
coins.size()
注意:在#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int coinChange(const std::vector<int> &coins, int total)
{
// Set high minimum
int min = 999999999;
//
// Your code here. Don't need a size parameter, use coins.size() instead
//
return min;
}
int main()
{
std::vector<int> coins;
int total;
std::string line;
while (std::getline(std::cin >> std::ws, line) && std::cin >> total) {
std::istringstream iss(line);
for (int coin; iss >> coin; ) {
coins.push_back(coin);
}
coinChange(coins, total);
coins.clear(); // reset vector before the next inputs
}
}
调用中使用std::ws
可以消耗先前输入的剩余空格或换行符。