#include<stdio.h>
#include<stdlib.h>
typedef struct product {
int pid;
char name[100];
int cost;
} PRODUCT;
PRODUCT products[] = {
{100, "せんべい", 90},
{101, "チョコレート", 200},
{102, "ガム", 100},
{105, "缶コーヒー", 80},
{107, "ヨーグルト", 180},
};
int num_products = 5;
typedef struct stock {
int pid;
int count;
struct stock* next;
} STOCK;
STOCK *stocks = NULL;
STOCK *create_stock(int pid, int count) {
STOCK
* s
= malloc(sizeof(STOCK
)); s->pid = pid;
s->count = count;
s->next = NULL;
return s;
}
PRODUCT *find_product_by_pid(int pid) {
int i;
for (i = 0; i < num_products; i++) {
if (products[i].pid == pid) {
return &products[i];
}
}
return NULL;
}
void print_product(int pid) {
for (int i = 0; i < num_products; i++)
if (products[i].pid == pid) {
printf("name: %s, cost: %d\n", products
[i
].
name, products
[i
].
cost); break;
}
}
/* --------- */
void receive_product(int pid, int count) {
STOCK *s = stocks;
while(s != NULL){
if (s->pid == pid) {
s->count += count;
return;
}
s = s->next;
}
s = create_stock(pid, count);
s->next = stocks;
stocks = s;
}
int ship_product(int pid, int count) {
STOCK *s = stocks;
while(s != NULL){
if (s->pid == pid) {
if (s->count > count) {
s->count -= count;
return count; /* out of loop */
} else {
int ret = s->count;
s->count = 0;
return ret; /* out of loop */
}
}
s = s->next;
}
return 0;
}
int evaluate_stocks() {
int total_evaluate_value = 0;
STOCK *s = stocks;
while (s != 0) {
total_evaluate_value += (s->count * (find_product_by_pid(s->pid)->cost));
s = s->next;
}
return total_evaluate_value;
}
void dump(STOCK *root) {
STOCK *s = root;
while (s != 0) {
printf("pid: %d, count: %d\n", s
->pid
, s
->count
); s = s->next;
}
}
void release(STOCK *root) {
STOCK *s = root;
while (s != 0) {
STOCK *t = s;
s = s->next;
}
}
int main(void) {
print_product(100);
print_product(107);
receive_product(products[0].pid, 10);
receive_product(products[1].pid, 20);
receive_product(products[2].pid, 30);
printf(":%d\n", ship_product
(products
[0].
pid, 5)); printf(":%d\n", ship_product
(products
[1].
pid, 6)); printf(":%d\n", ship_product
(products
[2].
pid, 7)); printf(":%d\n", ship_product
(products
[2].
pid, 100)); printf(":%d\n", ship_product
(products
[2].
pid, 100));
printf("Value: %d\n", evaluate_stocks
()); release(stocks);
return 0;
}
/* end */
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+Cgp0eXBlZGVmIHN0cnVjdCBwcm9kdWN0IHsKICBpbnQgcGlkOwogIGNoYXIgbmFtZVsxMDBdOwogIGludCBjb3N0Owp9IFBST0RVQ1Q7CgpQUk9EVUNUIHByb2R1Y3RzW10gPSB7CiAgezEwMCwgIuOBm+OCk+OBueOBhCIsIDkwfSwKICB7MTAxLCAi44OB44On44Kz44Os44O844OIIiwgMjAwfSwKICB7MTAyLCAi44Ks44OgIiwgMTAwfSwKICB7MTA1LCAi57y244Kz44O844OS44O8IiwgODB9LAogIHsxMDcsICLjg6jjg7zjgrDjg6vjg4giLCAxODB9LAp9OwoKaW50IG51bV9wcm9kdWN0cyA9IDU7Cgp0eXBlZGVmIHN0cnVjdCBzdG9jayB7CiAgaW50IHBpZDsKICBpbnQgY291bnQ7CiAgc3RydWN0IHN0b2NrKiBuZXh0Owp9IFNUT0NLOwoKU1RPQ0sgKnN0b2NrcyA9IE5VTEw7CgpTVE9DSyAqY3JlYXRlX3N0b2NrKGludCBwaWQsIGludCBjb3VudCkgewogIFNUT0NLKiBzID0gbWFsbG9jKHNpemVvZihTVE9DSykpOwogIHMtPnBpZCA9IHBpZDsKICBzLT5jb3VudCA9IGNvdW50OwogIHMtPm5leHQgPSBOVUxMOwogIHJldHVybiBzOwp9CgpQUk9EVUNUICpmaW5kX3Byb2R1Y3RfYnlfcGlkKGludCBwaWQpIHsKICBpbnQgaTsKICBmb3IgKGkgPSAwOyBpIDwgbnVtX3Byb2R1Y3RzOyBpKyspIHsKICAgIGlmIChwcm9kdWN0c1tpXS5waWQgPT0gcGlkKSB7CiAgICAgIHJldHVybiAmcHJvZHVjdHNbaV07CiAgICB9CiAgfQogIHJldHVybiBOVUxMOwp9Cgp2b2lkIHByaW50X3Byb2R1Y3QoaW50IHBpZCkgewogIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3Byb2R1Y3RzOyBpKyspCiAgICBpZiAocHJvZHVjdHNbaV0ucGlkID09IHBpZCkgewogICAgICBwcmludGYoIm5hbWU6ICVzLCBjb3N0OiAlZFxuIiwgcHJvZHVjdHNbaV0ubmFtZSwgcHJvZHVjdHNbaV0uY29zdCk7CiAgICAgIGJyZWFrOwogICAgfQp9CgovKiAtLS0tLS0tLS0gKi8Kdm9pZCByZWNlaXZlX3Byb2R1Y3QoaW50IHBpZCwgaW50IGNvdW50KSB7CiAgU1RPQ0sgKnMgPSBzdG9ja3M7CiAgd2hpbGUocyAhPSBOVUxMKXsKICAgIGlmIChzLT5waWQgPT0gcGlkKSB7CiAgICAgIHMtPmNvdW50ICs9IGNvdW50OwogICAgICByZXR1cm47CiAgICB9CiAgICBzID0gcy0+bmV4dDsKICB9CiAgcyA9IGNyZWF0ZV9zdG9jayhwaWQsIGNvdW50KTsKICBzLT5uZXh0ID0gc3RvY2tzOwogIHN0b2NrcyA9IHM7Cn0KCmludCBzaGlwX3Byb2R1Y3QoaW50IHBpZCwgaW50IGNvdW50KSB7CiAgU1RPQ0sgKnMgPSBzdG9ja3M7CiAgd2hpbGUocyAhPSBOVUxMKXsKICAgIGlmIChzLT5waWQgPT0gcGlkKSB7CiAgICAgIGlmIChzLT5jb3VudCA+IGNvdW50KSB7CiAgICAgICAgcy0+Y291bnQgLT0gY291bnQ7CiAgICAgICAgcmV0dXJuIGNvdW50OyAvKiBvdXQgb2YgbG9vcCAqLwogICAgICB9IGVsc2UgewogICAgICAgIGludCByZXQgPSBzLT5jb3VudDsKICAgICAgICBzLT5jb3VudCA9IDA7CiAgICAgICAgcmV0dXJuIHJldDsgLyogb3V0IG9mIGxvb3AgKi8KICAgICAgfQogICAgfQogICAgcyA9IHMtPm5leHQ7CiAgfQogIHJldHVybiAwOwp9CgppbnQgZXZhbHVhdGVfc3RvY2tzKCkgewogIGludCB0b3RhbF9ldmFsdWF0ZV92YWx1ZSA9IDA7CiAgU1RPQ0sgKnMgPSBzdG9ja3M7CiAgd2hpbGUgKHMgIT0gMCkgewogICAgdG90YWxfZXZhbHVhdGVfdmFsdWUgKz0gKHMtPmNvdW50ICogKGZpbmRfcHJvZHVjdF9ieV9waWQocy0+cGlkKS0+Y29zdCkpOwogICAgcyA9IHMtPm5leHQ7CiAgIH0KICByZXR1cm4gdG90YWxfZXZhbHVhdGVfdmFsdWU7Cn0KCnZvaWQgZHVtcChTVE9DSyAqcm9vdCkgewogIFNUT0NLICpzID0gcm9vdDsKICB3aGlsZSAocyAhPSAwKSB7CiAgICBwcmludGYoInBpZDogJWQsIGNvdW50OiAlZFxuIiwgcy0+cGlkLCBzLT5jb3VudCk7CiAgICBzID0gcy0+bmV4dDsKICB9Cn0KCnZvaWQgcmVsZWFzZShTVE9DSyAqcm9vdCkgewogIFNUT0NLICpzID0gcm9vdDsKICB3aGlsZSAocyAhPSAwKSB7CiAgICBTVE9DSyAqdCA9IHM7CiAgICBzID0gcy0+bmV4dDsKICAgIGZyZWUodCk7CiAgfQp9CgppbnQgbWFpbih2b2lkKSB7CiAgcHJpbnRfcHJvZHVjdCgxMDApOwogIHByaW50X3Byb2R1Y3QoMTA3KTsKICByZWNlaXZlX3Byb2R1Y3QocHJvZHVjdHNbMF0ucGlkLCAxMCk7CiAgcmVjZWl2ZV9wcm9kdWN0KHByb2R1Y3RzWzFdLnBpZCwgMjApOwogIHJlY2VpdmVfcHJvZHVjdChwcm9kdWN0c1syXS5waWQsIDMwKTsKCiAgcHJpbnRmKCI6JWRcbiIsIHNoaXBfcHJvZHVjdChwcm9kdWN0c1swXS5waWQsIDUpKTsKICBwcmludGYoIjolZFxuIiwgc2hpcF9wcm9kdWN0KHByb2R1Y3RzWzFdLnBpZCwgNikpOwogIHByaW50ZigiOiVkXG4iLCBzaGlwX3Byb2R1Y3QocHJvZHVjdHNbMl0ucGlkLCA3KSk7CiAgcHJpbnRmKCI6JWRcbiIsIHNoaXBfcHJvZHVjdChwcm9kdWN0c1syXS5waWQsIDEwMCkpOwogIHByaW50ZigiOiVkXG4iLCBzaGlwX3Byb2R1Y3QocHJvZHVjdHNbMl0ucGlkLCAxMDApKTsKCiAgcHJpbnRmKCJWYWx1ZTogJWRcbiIsIGV2YWx1YXRlX3N0b2NrcygpKTsKICByZWxlYXNlKHN0b2Nrcyk7CiAgcmV0dXJuIDA7Cn0KLyogZW5kICovCg==