Я решаю следующую проблему программирования:
URI Online Judge | 1018 - Банкноты
В этой задаче вы должны прочитать целое число и вычислить наименьшее возможное количество нот, в которых значение может быть разложено. Примечания: 100, 50, 20, 10, 5, 2 e 1. Распечатайте прочитанное значение и список заметок.
вход
Входной файл содержит целое число N (0 <N <1000000).
Вывод
Распечатайте минимальное количество необходимых банкнот, как в данном примере.
Я пробовал следующее решение:
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
bool NTrue(int n);
void HowMany(int x, int BankNote);
int main(int argc, char ** argv) {
int N;
cin >> N;
int BankNote = 100;
if (NTrue(N)) {
while (BankNote != 0) {
if (BankNote == 25)
BankNote = 20;
HowMany(N, BankNote);
N = N % BankNote;
BankNote = BankNote / 2;
}
}
return 0;
}
bool NTrue(int n) {
if (0 < n && n <= pow(10, 6))
return true;
else
return false;
}
void HowMany(int x, int BankNote) {
int result = x / BankNote;
float BN = BankNote;
cout << result << " nota(s) de R$ " << fixed << setprecision(2) << BN << endl;
}
Я не получаю желаемого результата. Что я делаю не так?
Я вижу, что выход должен иметь особый формат, записывая 1,00
вместо 1
. Здесь символ запятой должен быть десятичным разделителем с плавающей запятой.
Я предполагаю, что, когда онлайн-судья запускает вашу программу, он получает 1.00
вместо этого. Символ, используемый для фракций, зависит от локали; онлайн-судья может использовать другой язык, поэтому он использует символ точки (.
) в качестве разделителя.
Попробуйте напечатать часть .00
явно:
void HowMany(int x, int BankNote) {
int result = x / BankNote;
cout << result << " nota(s) de R$ " << result << ",00" << endl;
}
Конечно, это просто догадка.
Что-то вроде этого?
#include <algorithm>
#include <iostream>
#include <vector>
#include <cstdlib>
int main(int nargc, char* argv[]) {
int n = atoi(argv[1]);
int arr[] = {100,50,20,10,5,2,1};
std::vector<int> notes (arr, arr + sizeof(arr) / sizeof(arr[0]) );
std::cout << n << std::endl;
for( int i = 0; i < notes.size(); i++ ) {
int b = n/notes[i];
if ( b > 0 ) { std::cout << b << " " << notes[i] << " bills " << std::endl; }
n = n%notes[i];
}
return 0;
}