「コケいろ-Make Purse Light」の編集履歴(バックアップ)一覧はこちら
「コケいろ-Make Purse Light」(2010/04/25 (日) 14:22:34) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
// 40分
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
struct sKozeni{
int Maisu,SiharaiMaisu;
const int Kingaku;
sKozeni(int kingaku)
:Kingaku(kingaku){}
void Init(){
SiharaiMaisu = 0;
}
};
int main(){
int Siharai;
sKozeni Kozeni[4]={
10,50,100,500
};
while(1){
scanf("%d",&Siharai);
if(Siharai==0){ // 終了条件
break;
}
for(int i=0 ; i<4 ; i++){ // 4種類の硬貨枚数を格納、変数の初期化
scanf("%d",&Kozeni[i].Maisu);
Kozeni[i].Init();
}
// 支払い金額に関係なく、枚数を減らす
int i=0;
while( i != 3 ){
if( (Kozeni[i].Maisu * Kozeni[i].Kingaku) > Kozeni[i+1].Kingaku ){
Kozeni[i].Maisu--;
Kozeni[i+1].Maisu++;
}
else{
i++;
}
}
// 金額の小さな硬貨から出して支払う
i = 0;
while(1){
if( Kozeni[i].Maisu>0 ){
Siharai -= Kozeni[i].Kingaku; // 支払額の更新
Kozeni[i].Maisu--; // 所持枚数を減らす
Kozeni[i].SiharaiMaisu++; // 支払い枚数を増やす
if( Siharai<=0 ){ // 支払い終わったらループ終了
break;
}
}
else{
i++; // 小銭の種類を次へ移す
}
}
// 出力
for(int i=0 ; i<4 ; i++){
if( Kozeni[i].SiharaiMaisu>0 ){
printf("%d %d\n",Kozeni[i].Kingaku,Kozeni[i].SiharaiMaisu);
}
}
puts("");
}
return 0;
}
表示オプション
横に並べて表示:
変化行の前後のみ表示: