質問編集履歴

12

コードの修正

2020/02/13 09:00

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,26 @@
1
- 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。お助けいただけると幸いです。書いたコード貼っときます。
1
+ 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。お助けいただけると幸いです。書いたコード貼っときます。()
2
2
 
3
3
  例)F1.txt(name price amount /商品は10個と確定しています。)
4
4
 
5
- Apple 1.00 5
5
+ Apple 1 20
6
6
 
7
- Banana 0.90 4
7
+ Banana 4 25
8
8
 
9
+ Peach 4 34
10
+
11
+ Grape 4 3
12
+
13
+ Strawberry 2 40
14
+
15
+ Blueberry 3 9
16
+
17
+ Rice 10 2
18
+
9
- .......
19
+ Egg 1 22
20
+
21
+ Pen 6 10
22
+
23
+ Note 1 19
10
24
 
11
25
 
12
26
 
@@ -54,7 +68,7 @@
54
68
 
55
69
 
56
70
 
57
- int check(Data * data) {
71
+ int check(Data* data) {
58
72
 
59
73
  int f = 0;
60
74
 
@@ -72,11 +86,31 @@
72
86
 
73
87
 
74
88
 
89
+
90
+
75
- void search() {
91
+ int count = 0;
92
+
93
+ //the number of all possible combinations
94
+
95
+ void pick(Data* data, int index, int maxindex, float price) {
96
+
97
+ if(maxindex <= index) return;
98
+
99
+ float newprice = price + (data+index)->price;
100
+
101
+ if(newprice <= budget){
102
+
103
+ count++;
104
+
105
+ pick(data, index+1, maxindex, newprice);
106
+
107
+ }
108
+
109
+ pick(data, index+1, maxindex, price);
110
+
111
+
76
112
 
77
113
  }
78
-
79
-
80
114
 
81
115
 
82
116
 
@@ -102,6 +136,10 @@
102
136
 
103
137
  if(C == 0) return 0;
104
138
 
139
+ pick(q, 1, 9, 0);
140
+
141
+ printf("%d", count);
142
+
105
143
  /*rep(i,10) {
106
144
 
107
145
  printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
@@ -120,6 +158,8 @@
120
158
 
121
159
 
122
160
 
161
+
162
+
123
163
 
124
164
 
125
165
 

11

2020/02/13 09:00

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。組み合わせをいきなり列挙するのはなんか手に負えなそうだったので一旦何通りあるかを出してみようと思っています。お助けいただけると幸いです。書いたコード貼っときます。
1
+ 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。お助けいただけると幸いです。書いたコード貼っときます。
2
2
 
3
3
  例)F1.txt(name price amount /商品は10個と確定しています。)
4
4
 

10

問題点の訂正

2020/02/12 23:05

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。組み合わせを列挙する部分がどすればよいわからなくっています。お助けいただけると幸いです。書いたコード貼っときます。
1
+ 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。組み合わせをいきなり列挙するのはなんか手に負えなそだったので一旦何通りあるを出しみようと思っています。お助けいただけると幸いです。書いたコード貼っときます。
2
2
 
3
3
  例)F1.txt(name price amount /商品は10個と確定しています。)
4
4
 

9

ミスがありましたので訂正しました

2020/02/12 19:07

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  例)F1.txt(name price amount /商品は10個と確定しています。)
4
4
 
5
- Apple 1.00 20
5
+ Apple 1.00 5
6
6
 
7
- Banana 0.90 40
7
+ Banana 0.90 4
8
8
 
9
9
  .......
10
10
 

8

コードの修正

2020/02/12 18:41

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -100,9 +100,7 @@
100
100
 
101
101
  int C = check(q);
102
102
 
103
- if(C == 0) {
103
+ if(C == 0) return 0;
104
-
105
- }
106
104
 
107
105
  /*rep(i,10) {
108
106
 
@@ -120,6 +118,8 @@
120
118
 
121
119
 
122
120
 
121
+
122
+
123
123
 
124
124
 
125
125
 

7

コードの修正

2020/02/12 18:13

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -104,11 +104,11 @@
104
104
 
105
105
  }
106
106
 
107
- rep(i,10) {
107
+ /*rep(i,10) {
108
108
 
109
109
  printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
110
110
 
111
- }
111
+ }*/
112
112
 
113
113
 
114
114
 

6

コードの修正

2020/02/12 18:13

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -38,6 +38,10 @@
38
38
 
39
39
 
40
40
 
41
+ float budget;
42
+
43
+
44
+
41
45
  void input(FILE* fi, Data* data) {
42
46
 
43
47
  rep(i,10) {
@@ -47,6 +51,34 @@
47
51
  }
48
52
 
49
53
  }
54
+
55
+
56
+
57
+ int check(Data * data) {
58
+
59
+ int f = 0;
60
+
61
+ rep(i,10){
62
+
63
+ if(budget >= (data+i)->price) f++;
64
+
65
+ }
66
+
67
+ if(f==0) printf("you don't have enough money:'(\n");
68
+
69
+ return f;
70
+
71
+ }
72
+
73
+
74
+
75
+ void search() {
76
+
77
+ }
78
+
79
+
80
+
81
+
50
82
 
51
83
  int main(){
52
84
 
@@ -60,9 +92,17 @@
60
92
 
61
93
  fi = fopen(ni,"r");
62
94
 
63
-
95
+ printf("insert your budget!!\n");
96
+
97
+ scanf("%f", &budget);
64
98
 
65
99
  input(fi, q);
100
+
101
+ int C = check(q);
102
+
103
+ if(C == 0) {
104
+
105
+ }
66
106
 
67
107
  rep(i,10) {
68
108
 

5

コードの修正

2020/02/12 18:12

投稿

gekko
gekko

スコア16

test CHANGED
@@ -1 +1 @@
1
- オードのすべての組み合わせの列挙
1
+ すべての組み合わせの列挙
test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  ```c
20
20
 
21
+ #include <stdio.h>
21
22
 
22
-
23
- #include<stdio.h>
23
+ #include <float.h>
24
24
 
25
25
  #define rep(i,n) for(int i = 0; i < (n); ++i)
26
26
 
@@ -38,19 +38,15 @@
38
38
 
39
39
 
40
40
 
41
- void input(FILE*, Data*);
41
+ void input(FILE* fi, Data* data) {
42
42
 
43
- void output(FILE*, Data*, int, int );
43
+ rep(i,10) {
44
44
 
45
- int check(Data*);
45
+ fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount);
46
46
 
47
+ }
47
48
 
48
-
49
- int m = 10; //amount of the products
50
-
51
-
52
-
53
- float budget = 0;
49
+ }
54
50
 
55
51
  int main(){
56
52
 
@@ -58,21 +54,15 @@
58
54
 
59
55
  Data *q = &p;
60
56
 
61
- char ni[10] ="F1.txt",no[10]="result1.txt";
57
+ char ni[10] ="F1.txt";
62
58
 
63
- FILE *fi, *fo;
59
+ FILE *fi;
64
60
 
65
61
  fi = fopen(ni,"r");
66
-
67
- fo = fopen(no,"w");
68
62
 
69
63
 
70
64
 
71
65
  input(fi, q);
72
-
73
- int d = check(fi);
74
-
75
- if(d==0) return 0;
76
66
 
77
67
  rep(i,10) {
78
68
 
@@ -82,53 +72,9 @@
82
72
 
83
73
 
84
74
 
85
-
86
-
87
75
  return 0;
88
76
 
89
- }
77
+
90
-
91
-
92
-
93
- void input(FILE* fi, Data* data){
94
-
95
- printf("insert your budget!!\n");
96
-
97
- scanf("%f", &budget);
98
-
99
- rep(i,m){
100
-
101
- fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount);
102
-
103
- }
104
-
105
- }
106
-
107
- //a is amount of products
108
-
109
- void output(FILE* fo, Data* data, int i, int a) {
110
-
111
- fprintf(fo, "%s %f %d\n", (data+i)->name, (data+i)->price, a);
112
-
113
- printf("%s %f %d\n", (data+i)->name, (data+i)->price, a);
114
-
115
- }
116
-
117
-
118
-
119
- int check(Data* data) {
120
-
121
- int f = 0;
122
-
123
- rep(i,m) {
124
-
125
- if((data+i)->price <= budget) f++;
126
-
127
- }
128
-
129
- if(f==0) printf("your money is not enough");
130
-
131
- return f;
132
78
 
133
79
  }
134
80
 

4

コードの修正

2020/02/12 18:03

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -17,6 +17,8 @@
17
17
 
18
18
 
19
19
  ```c
20
+
21
+
20
22
 
21
23
  #include<stdio.h>
22
24
 
@@ -40,7 +42,7 @@
40
42
 
41
43
  void output(FILE*, Data*, int, int );
42
44
 
43
- int check(Data*, int);
45
+ int check(Data*);
44
46
 
45
47
 
46
48
 
@@ -48,7 +50,7 @@
48
50
 
49
51
 
50
52
 
51
- float budget;
53
+ float budget = 0;
52
54
 
53
55
  int main(){
54
56
 
@@ -68,11 +70,15 @@
68
70
 
69
71
  input(fi, q);
70
72
 
71
- int d = check(fi, budget);
73
+ int d = check(fi);
72
74
 
73
75
  if(d==0) return 0;
74
76
 
75
-
77
+ rep(i,10) {
78
+
79
+ printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
80
+
81
+ }
76
82
 
77
83
 
78
84
 
@@ -92,7 +98,7 @@
92
98
 
93
99
  rep(i,m){
94
100
 
95
- fscanf(fi, "%s %f %d", (data+i)->name, (data+i)->price, &(data+i)->amount);
101
+ fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount);
96
102
 
97
103
  }
98
104
 
@@ -110,13 +116,13 @@
110
116
 
111
117
 
112
118
 
113
- int check(Data* data, int x) {
119
+ int check(Data* data) {
114
120
 
115
121
  int f = 0;
116
122
 
117
123
  rep(i,m) {
118
124
 
119
- if((data+i)->price <= x) f++;
125
+ if((data+i)->price <= budget) f++;
120
126
 
121
127
  }
122
128
 
@@ -125,8 +131,6 @@
125
131
  return f;
126
132
 
127
133
  }
128
-
129
-
130
134
 
131
135
 
132
136
 

3

コードの修正

2020/02/12 16:16

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  int amount;
34
34
 
35
- }Data
35
+ }Data;
36
36
 
37
37
 
38
38
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  int check(Data*, int);
44
44
 
45
- void search(Data*);
45
+
46
46
 
47
47
  int m = 10; //amount of the products
48
48
 
@@ -68,7 +68,7 @@
68
68
 
69
69
  input(fi, q);
70
70
 
71
- int d = check(f, budget);
71
+ int d = check(fi, budget);
72
72
 
73
73
  if(d==0) return 0;
74
74
 
@@ -86,15 +86,13 @@
86
86
 
87
87
  void input(FILE* fi, Data* data){
88
88
 
89
- int x;
90
-
91
89
  printf("insert your budget!!\n");
92
90
 
93
91
  scanf("%f", &budget);
94
92
 
95
93
  rep(i,m){
96
94
 
97
- fscanf(f, "%s %f %d", (data+i)->name, (data+i)->price, &(data+i)->amount);
95
+ fscanf(fi, "%s %f %d", (data+i)->name, (data+i)->price, &(data+i)->amount);
98
96
 
99
97
  }
100
98
 
@@ -106,7 +104,7 @@
106
104
 
107
105
  fprintf(fo, "%s %f %d\n", (data+i)->name, (data+i)->price, a);
108
106
 
109
- printf("%s %f %d\n", (data+i)->name, (data+i)->price, a)
107
+ printf("%s %f %d\n", (data+i)->name, (data+i)->price, a);
110
108
 
111
109
  }
112
110
 
@@ -122,7 +120,7 @@
122
120
 
123
121
  }
124
122
 
125
- if(f==0) printf("you don't have enough money");
123
+ if(f==0) printf("your money is not enough");
126
124
 
127
125
  return f;
128
126
 
@@ -134,12 +132,6 @@
134
132
 
135
133
 
136
134
 
137
- void search(Data* data) {
138
-
139
-
140
-
141
- }
142
-
143
135
 
144
136
 
145
137
 

2

コードの修正

2020/02/12 15:52

投稿

gekko
gekko

スコア16

test CHANGED
@@ -1 +1 @@
1
- すべての組み合わせの列挙
1
+ オードのすべての組み合わせの列挙
test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
  if(d==0) return 0;
74
74
 
75
- float min = fmin(q);
75
+
76
76
 
77
77
 
78
78
 

1

コードの修正

2020/02/12 15:43

投稿

gekko
gekko

スコア16

test CHANGED
File without changes
test CHANGED
@@ -41,8 +41,6 @@
41
41
  void output(FILE*, Data*, int, int );
42
42
 
43
43
  int check(Data*, int);
44
-
45
- float fmin(Data*);
46
44
 
47
45
  void search(Data*);
48
46
 
@@ -132,19 +130,7 @@
132
130
 
133
131
 
134
132
 
135
- float fmin(Data *data) {
136
133
 
137
- int x = 10001001;
138
-
139
- rep(i,m) {
140
-
141
- if(x<(data+i)->price) x = (data+i)->price;
142
-
143
- }
144
-
145
- return x;
146
-
147
- }
148
134
 
149
135
 
150
136