我正在解决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;
}
我没有得到理想的结果。我做错了什么?
答案 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;
}