1.
 /* Angewandte Mathematik, SS09, IFB 2C 
* ACM Problem #147 (Dollars)
* Link: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=83
*
* @author Dennis Wilfert
* @version 1.0, 07/02/2009
*
* Status : Accepted
* Runtime: 0.804
*/
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;


public class Main {

public static void main(String[] args) throws NumberFormatException, IOException {

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter p = new PrintWriter(new BufferedOutputStream(System.out));
int[] coin = new int[]{10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5};

// Betrag als Integerwert in cent
int amount;

// Betrag als Double-Wert in Dollar
double number;

// Kombinationsmöglichkeiten für die verschiedenen Beträge
long[] nway = new long[30001];
// Zahl als String
String string;

// Hilfsvariablen
int c, i, j;
nway[0] = 1;

// Sämtliche Kombinationen für alle Beträge von 0$ bis 300$ berechnen
for(i=0; i<coin.length; i++){
c = coin[i];
for(j = c; j<=30000; j++)
nway[j] += nway[j-c];
}
while(true){

string = reader.readLine();

// Betrag als double-Wert
number = Double.parseDouble(string);
if(number == 0)break;

// Betrag als int-Wert, aufgrund von Rundungsfehlern kann der Wert nicht von double in int umgewandelt werden
amount = Integer.parseInt(string.substring(0, string.indexOf('.'))+string.substring(string.indexOf('.')+1));

// Formatierte Augabe
p.printf("%6.2f %16d%n", number, nway[amount]);
}
p.flush();
}

}
2.
/*
* ACM Programming Contest
*
* Problem: 147 - Dollars
* Status: Accepted
* Language: C
* Runtime: 0.012
* Date: 2009-06-01 13:13:08
* Author: Axel Fiedler
*
*/
#include <stdio.h>
#include <math.h>

#define NOTES_AND_COINS 11
#define OPTIONS 6001

int money[NOTES_AND_COINS] = {1, 2, 4, 10, 20, 40, 100, 200, 400, 1000, 2000};
unsigned long long res[OPTIONS];

int main()
{
int i, j, c;
float f;

res[0] = 1;

for (i = 0; i < NOTES_AND_COINS; i++)
{
c = money[i];

for (j = c; j < OPTIONS; j++)
res[j] += res[j - c];
}

while (scanf("%f", &f) && (f != 0.0f))
{
printf("%6.2f%17llu\n", f, res[((int)ceil(f*100)/5)]);
}

return 0;
}