钞票计划

时间:2014-02-19 17:05:04

标签: c++

我正在解决following programming problem

  

URI在线评审员| 1018 - 纸币

     

在这个问题中,你必须读取一个整数并计算可以分解值的最小可能音符数。注释为100,50,20,10,5,2 e 1.打印读取的值和注释列表。

     

输入

     

输入文件包含整数N(0      

输出

     

打印所需钞票的最小数量,如给出的例子。

我尝试了以下解决方案:

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

我没有得到理想的结果。我做错了什么?

2 个答案:

答案 0 :(得分: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;
}

当然,这只是猜测。

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