Программа банкнот

0

Я решаю следующую проблему программирования:

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;
}

Я не получаю желаемого результата. Что я делаю не так?

  • 0
    На этот раз ваш вопрос не понятен. Пожалуйста, переформатируйте его.
  • 2
    Здесь очень сложно разглядеть вопрос.
Показать ещё 10 комментариев
Теги:

2 ответа

1

Я вижу, что выход должен иметь особый формат, записывая 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;
}

Конечно, это просто догадка.

  • 0
    Вероятно, наиболее разумное объяснение этой проблемы.
  • 0
    да, это было даже, я уверен, что это был мой первый ответ, и я изменю его после того, как попробую еще раз, как только сайт заработает ... Спасибо за вашу помощь: D
Показать ещё 1 комментарий
0

Что-то вроде этого?

#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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню