図のようなシンプルな自動販売機では、棚1と2に10個の商品があり、1〜10の順に番号が付けられ、価格と名前が付けられています。各番号は、商品を選択するための操作可能なボタンに対応しています。棚にある商品がユーザーによって購入された場合、商品は自動的にロッカーから取り出されて棚に送られ、棚に商品が確実に置かれるようになります。ユーザーは一度により多くのコインを投資でき、さまざまな製品を選択でき、自動販売機は一度に製品を出力して変更を取得できます。
ユーザーが商品を購入するための操作方法は次のとおりです。
(1)「硬貨入口」から硬貨を挿入し、複数の硬貨や紙幣を順番に挿入します。硬貨は1元(紙幣、硬貨)、2元(紙幣)、5元(紙幣)、10元(紙幣)をサポートできます。硬貨が置かれると、コントローラーは最初に硬貨をチェックして通貨値を識別し、カウントします。紙幣の合計値。コントローラーのディスプレイに表示され、コインが入れられていることを確認するようにユーザーに促します。
(2)コインが置かれたことを確認した後、対応する商品の外側にある数字ボタンを指で押すだけで商品を選択できます。自動販売機のコントローラーは、商品を選択するたびに、コインが購入に十分かどうかを判断し、コインが十分にある場合は、シリアル番号に基づいて自動的にアイテムをカウントし、必要なコインの価値を計算して、残高を確認します。お金が足りない場合、コントローラーは「お金が足りません」というプロンプトを表示します。ユーザーは購入をキャンセルすることができ、預け入れられたすべてのコインはユーザーに返却されます。
入力形式:
まず、通貨の値のシーケンスを入力し終わると-1、その後に複数の購入商品の番号を入力して、シーケンスで終わる-1。
出力形式:
コインの合計金額を出力し、購入した商品の名前と数量だけでなく、変更を取得します。
質問のアイデア:
主に構造の使用を検討します。
#include<iostream>
#include<string>
using namespace std;
bool find(int a[], int len, int x);
struct Commodity {
int num;
string name;
int price;
int amount;
};
Commodity commodity[11] = {
{
}, {
1,"Table-water", 1,0}, {
2,"Table-water", 1,0},
{
3,"Table-water", 1,0},{
4,"Coca-Cola", 2,0},
{
5,"Milk", 2,0},{
6,"Beer", 3,0},
{
7,"Orange-Juice", 3,0},{
8,"Sprite", 3,0},
{
9,"Oolong-Tea", 4,0},{
10,"Green-Tea", 4,0} };
int main()
{
int k = 0;
int obj[100], sum1 = 0, sum2 = 0;
int x;
cin >> x;
while (x != -1)
{
if (x == 1 || x == 2 || x == 5 || x == 10)
sum1 += x;
else
{
continue;
}
cin >> x;
}
int y;
cin >> y;
while (y != -1)
{
if (y >= 1 && y <= 10)
{
sum2 += commodity[y].price;
if (!find(obj, k, y)) //关键这句,防止准备输出的数组出现重复商品
obj[k++] = y;
commodity[y].amount++;
}
else
{
continue;
}
cin >> y;
}
if (sum1 >= sum2)
{
printf("Total:%dyuan,change:%dyuan\n", sum1, sum1 - sum2);
for (int i = 0; i < k; i++)
{
cout << commodity[obj[i]].name << ":" << commodity[obj[i]].amount << ";";
}
}
else if(sum1 < sum2)
cout << "Insufficient money" << endl;
return 0;
}
bool find(int a[], int len, int x)
{
for (int i = 0; i < len; i++)
{
if (a[i] == x)
return true;
}
return false;
}