#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 1000
int price[] = {2,3,4,5,8,6};
char nm[] = {"A1", "A2", "A3", "A4", "A5", "A6"};
int initialize(char* input, int i, int* shangpin, int* qianbi) {
for (int j = 0; j < 6; j++) {
int tempnum = input[i] - '0';
if (isdigit(input[i + 1])) tempnum = tempnum * 10 + (input[++i] - '0');
shangpin[j] = tempnum;
i += 2;
}
for (int j = 0; j < 4; j++) {
int tempnum = input[i] - '0';
if (isdigit(input[i + 1])) tempnum = tempnum * 10 + (input[++i] - '0');
qianbi[j] = tempnum;
i += 2;
}
printf("S001:Initialization is successful\n");
return (i - 1);
}
int pay(char* input, int i, int* shangpin, int* qianbi, int* balance) {
int bizhong = 4;
if (input[i] == '1' && input[i + 1] == '0' && input[i + 2] == ';') {
bizhong = 3;
i += 2;
} else if (input[i] == '5' && input[i + 1] == ';') {
bizhong = 2;
i++;
} else if (input[i] == '2' && input[i + 1] == ';') {
bizhong = 1;
i++;
} else if (input[i] == '1' && input[i + 1] == ';') {
bizhong = 0;
i++;
} else {
while (input[i] != ';') i++;
printf("E002:Denomination error\n");
return i;
}
int change = qianbi[0] + qianbi[1] * 2;
if (bizhong == 3) {
// 投入的是十元,需要查找我们的零钱是否足够10元。
if (change < 10) {
printf("E003:Change is not enough, pay fail\n");
return i;
}
} else if (bizhong == 2) {
if (change < 5) {
printf("E003:Change is not enough, pay fail\n");
return i;
}
}
int goods = 0;
for (int j = 0; j < 6; j++) {
goods += shangpin[j];
}
if (goods == 0) {
printf("E005:All the goods sold out\n");
return i;
}
qianbi[bizhong]++;
if (bizhong == 0) *balance += 1;
else if (bizhong == 1) *balance += 2;
else if (bizhong == 2) *balance += 5;
else *balance += 10;
printf("S002:Pay success,balance=%d\n", *balance);
return i;
}
int buy(char* input, int i, int* shangpin, int* qianbi, int* balance) {
int type = input[i + 1] - '0';
if (input[i] != 'A' || input[i + 2] != ';' || type > 6 || type < 1) {
printf("E006:Goods does not exist\n");
while (input[i] != ';') i++;
return i;
}
type--;
if(shangpin[type] == 0) {
printf("E007:The goods sold out\n");
} else if(*balance < price[type]) {
printf("E008:Lack of balance\n");
} else {
*balance -= price[type];
shangpin[type]--;
printf("S003:Buy success,balance=%d\n", *balance);
}
return (i + 2);
}
void printcoin(int y1, int y2, int y5, int y10) {
printf("1 yuan coin number=%d\n", y1);
printf("2 yuan coin number=%d\n", y2);
printf("5 yuan coin number=%d\n",y5);
printf("10 yuan coin number=%d\n",y10);
}
void change(int* qianbi, int* balance) {
int yuan1 = 0;
int yuan2 = 0;
int yuan5 = 0;
int yuan10 = 0;
if(*balance != 0) {
while(*balance >= 10 && qianbi[3] > 0) {
qianbi[3]--;
*balance -= 10;
yuan10++;
}
while(*balance >= 5 && qianbi[2] > 0) {
qianbi[2]--;
*balance -= 5;
yuan5++;
}
while(*balance >= 2 && qianbi[1] > 0) {
qianbi[1]--;
*balance -= 2;
yuan2++;
}
while(*balance >= 1 && qianbi[0] > 0) {
qianbi[0]--;
*balance -= 1;
yuan1++;
}
printcoin(yuan1, yuan2, yuan5, yuan10);
} else {
printf("E009:Work failure\n");
}
}
int query(char* input, int i, int* shangpin, int* qianbi) {
if(input[i] == ' ' && input[i + 1] == '0' && input[i + 2] == ';') {
i += 2;
for(int j = 0; j < 6; j++) {
printf("%s %d %d\n", nm[j], price[j], shangpin[j]);
}
} else if(input[i] == ' ' && input[i + 1] == '1' && input[i + 2] == ';') {
i += 2;
} else {
while(input[i] != ';') i++;
printf("E010:Parameter error\n");
}
return i;
}
int main() {
char* input = (char*)malloc(sizeof(char) * MAXLEN);
while (fgets(input, MAXLEN, stdin) != NULL) {
int shangpin[6] = {0};
int qianbi[4] = {0};
int len = 0;
int balance = 0;
while (input[len] != '\n') {
len++;
}
input[len] = '\0';
for (int i = 0; i < len; i++) {
if (input[i] == 'r') {
i = initialize(input, i + 2, shangpin, qianbi);
}
else if (input[i] == 'p') {
i = pay(input, i + 2, shangpin, qianbi, &balance);
}
else if (input[i] == 'b') {
i = buy(input, i + 2, shangpin, qianbi, &balance);
}
else if (input[i] == 'c') {
change(qianbi, &balance);
i++;
}
else if (input[i] == 'q') {
i = query(input, i + 1, shangpin, qianbi);
}
}
// printf("%s\n", input);
}
free(input);
return 0;
}