商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。お助けいただけると幸いです。書いたコード貼っときます。()
例)F1.txt(name price amount /商品は10個と確定しています。)
Apple 1 20
Banana 4 25
Peach 4 34
Grape 4 3
Strawberry 2 40
Blueberry 3 9
Rice 10 2
Egg 1 22
Pen 6 10
Note 1 19
c
1#include <stdio.h> 2#include <float.h> 3#define rep(i,n) for(int i = 0; i < (n); ++i) 4 5typedef struct{ 6 char name[30]; 7 float price; 8 int amount; 9}Data; 10 11float budget; 12 13void input(FILE* fi, Data* data) { 14 rep(i,10) { 15 fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount); 16 } 17} 18 19int check(Data* data) { 20 int f = 0; 21 rep(i,10){ 22 if(budget >= (data+i)->price) f++; 23 } 24 if(f==0) printf("you don't have enough money:'(\n"); 25 return f; 26} 27 28 29int count = 0; 30//the number of all possible combinations 31void pick(Data* data, int index, int maxindex, float price) { 32 if(maxindex <= index) return; 33 float newprice = price + (data+index)->price; 34 if(newprice <= budget){ 35 count++; 36 pick(data, index+1, maxindex, newprice); 37 } 38 pick(data, index+1, maxindex, price); 39 40} 41 42int main(){ 43 Data p[10]; 44 Data *q = &p; 45 char ni[10] ="F1.txt"; 46 FILE *fi; 47 fi = fopen(ni,"r"); 48 printf("insert your budget!!\n"); 49 scanf("%f", &budget); 50 input(fi, q); 51 int C = check(q); 52 if(C == 0) return 0; 53 pick(q, 1, 9, 0); 54 printf("%d", count); 55 /*rep(i,10) { 56 printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount); 57 }*/ 58 59 return 0; 60 61} 62 63 64 65 66 67 68
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/12 22:23
2020/02/12 23:09
2020/02/13 01:47
2020/02/13 09:03
2020/02/13 09:26