teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

12

コードの修正

2020/02/13 09:00

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,15 @@
1
- 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。お助けいただけると幸いです。書いたコード貼っときます。
1
+ 商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。お助けいただけると幸いです。書いたコード貼っときます。()
2
2
  例)F1.txt(name price amount /商品は10個と確定しています。)
3
- Apple 1.00 5
3
+ Apple 1 20
4
- Banana 0.90 4
4
+ Banana 4 25
5
+ Peach 4 34
6
+ Grape 4 3
7
+ Strawberry 2 40
8
+ Blueberry 3 9
9
+ Rice 10 2
5
- .......
10
+ Egg 1 22
11
+ Pen 6 10
12
+ Note 1 19
6
13
 
7
14
 
8
15
 
@@ -26,7 +33,7 @@
26
33
  }
27
34
  }
28
35
 
29
- int check(Data * data) {
36
+ int check(Data* data) {
30
37
  int f = 0;
31
38
  rep(i,10){
32
39
  if(budget >= (data+i)->price) f++;
@@ -35,10 +42,20 @@
35
42
  return f;
36
43
  }
37
44
 
45
+
38
- void search() {
46
+ int count = 0;
47
+ //the number of all possible combinations
48
+ void pick(Data* data, int index, int maxindex, float price) {
49
+ if(maxindex <= index) return;
50
+ float newprice = price + (data+index)->price;
51
+ if(newprice <= budget){
52
+ count++;
53
+ pick(data, index+1, maxindex, newprice);
54
+ }
55
+ pick(data, index+1, maxindex, price);
56
+
39
57
  }
40
58
 
41
-
42
59
  int main(){
43
60
  Data p[10];
44
61
  Data *q = &p;
@@ -50,6 +67,8 @@
50
67
  input(fi, q);
51
68
  int C = check(q);
52
69
  if(C == 0) return 0;
70
+ pick(q, 1, 9, 0);
71
+ printf("%d", count);
53
72
  /*rep(i,10) {
54
73
  printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
55
74
  }*/
@@ -59,6 +78,7 @@
59
78
  }
60
79
 
61
80
 
81
+
62
82
 
63
83
 
64
84
 

11

2020/02/13 09:00

投稿

gekko
gekko

スコア16

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

10

問題点の訂正

2020/02/12 23:05

投稿

gekko
gekko

スコア16

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

9

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

2020/02/12 19:07

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  商品の情報をファイルから入手し、入力された予算に応じて買うことのできる全ての組み合わせを列挙する問題です。組み合わせを列挙する部分がどうすればよいかわからなくて困っています。お助けいただけると幸いです。書いたコード貼っときます。
2
2
  例)F1.txt(name price amount /商品は10個と確定しています。)
3
- Apple 1.00 20
3
+ Apple 1.00 5
4
- Banana 0.90 40
4
+ Banana 0.90 4
5
5
  .......
6
6
 
7
7
 

8

コードの修正

2020/02/12 18:41

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -49,8 +49,7 @@
49
49
  scanf("%f", &budget);
50
50
  input(fi, q);
51
51
  int C = check(q);
52
- if(C == 0) {
52
+ if(C == 0) return 0;
53
- }
54
53
  /*rep(i,10) {
55
54
  printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
56
55
  }*/
@@ -59,6 +58,7 @@
59
58
 
60
59
  }
61
60
 
61
+
62
62
 
63
63
 
64
64
 

7

コードの修正

2020/02/12 18:13

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -51,9 +51,9 @@
51
51
  int C = check(q);
52
52
  if(C == 0) {
53
53
  }
54
- rep(i,10) {
54
+ /*rep(i,10) {
55
55
  printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
56
- }
56
+ }*/
57
57
 
58
58
  return 0;
59
59
 

6

コードの修正

2020/02/12 18:13

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -18,19 +18,39 @@
18
18
  int amount;
19
19
  }Data;
20
20
 
21
+ float budget;
22
+
21
23
  void input(FILE* fi, Data* data) {
22
24
  rep(i,10) {
23
25
  fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount);
24
26
  }
25
27
  }
28
+
29
+ int check(Data * data) {
30
+ int f = 0;
31
+ rep(i,10){
32
+ if(budget >= (data+i)->price) f++;
33
+ }
34
+ if(f==0) printf("you don't have enough money:'(\n");
35
+ return f;
36
+ }
37
+
38
+ void search() {
39
+ }
40
+
41
+
26
42
  int main(){
27
43
  Data p[10];
28
44
  Data *q = &p;
29
45
  char ni[10] ="F1.txt";
30
46
  FILE *fi;
31
47
  fi = fopen(ni,"r");
32
-
48
+ printf("insert your budget!!\n");
49
+ scanf("%f", &budget);
33
50
  input(fi, q);
51
+ int C = check(q);
52
+ if(C == 0) {
53
+ }
34
54
  rep(i,10) {
35
55
  printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
36
56
  }

5

コードの修正

2020/02/12 18:12

投稿

gekko
gekko

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- オードのすべての組み合わせの列挙
1
+ すべての組み合わせの列挙
body CHANGED
@@ -8,8 +8,8 @@
8
8
 
9
9
 
10
10
  ```c
11
-
12
- #include<stdio.h>
11
+ #include <stdio.h>
12
+ #include <float.h>
13
13
  #define rep(i,n) for(int i = 0; i < (n); ++i)
14
14
 
15
15
  typedef struct{
@@ -18,54 +18,27 @@
18
18
  int amount;
19
19
  }Data;
20
20
 
21
- void input(FILE*, Data*);
21
+ void input(FILE* fi, Data* data) {
22
- void output(FILE*, Data*, int, int );
23
- int check(Data*);
22
+ rep(i,10) {
24
-
25
- int m = 10; //amount of the products
23
+ fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount);
26
-
27
- float budget = 0;
24
+ }
25
+ }
28
26
  int main(){
29
27
  Data p[10];
30
28
  Data *q = &p;
31
- char ni[10] ="F1.txt",no[10]="result1.txt";
29
+ char ni[10] ="F1.txt";
32
- FILE *fi, *fo;
30
+ FILE *fi;
33
31
  fi = fopen(ni,"r");
34
- fo = fopen(no,"w");
35
32
 
36
33
  input(fi, q);
37
- int d = check(fi);
38
- if(d==0) return 0;
39
34
  rep(i,10) {
40
35
  printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
41
36
  }
42
37
 
38
+ return 0;
43
39
 
44
- return 0;
45
40
  }
46
41
 
47
- void input(FILE* fi, Data* data){
48
- printf("insert your budget!!\n");
49
- scanf("%f", &budget);
50
- rep(i,m){
51
- fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount);
52
- }
53
- }
54
- //a is amount of products
55
- void output(FILE* fo, Data* data, int i, int a) {
56
- fprintf(fo, "%s %f %d\n", (data+i)->name, (data+i)->price, a);
57
- printf("%s %f %d\n", (data+i)->name, (data+i)->price, a);
58
- }
59
-
60
- int check(Data* data) {
61
- int f = 0;
62
- rep(i,m) {
63
- if((data+i)->price <= budget) f++;
64
- }
65
- if(f==0) printf("your money is not enough");
66
- return f;
67
- }
68
-
69
42
 
70
43
 
71
44
 

4

コードの修正

2020/02/12 18:03

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,7 @@
8
8
 
9
9
 
10
10
  ```c
11
+
11
12
  #include<stdio.h>
12
13
  #define rep(i,n) for(int i = 0; i < (n); ++i)
13
14
 
@@ -19,11 +20,11 @@
19
20
 
20
21
  void input(FILE*, Data*);
21
22
  void output(FILE*, Data*, int, int );
22
- int check(Data*, int);
23
+ int check(Data*);
23
24
 
24
25
  int m = 10; //amount of the products
25
26
 
26
- float budget;
27
+ float budget = 0;
27
28
  int main(){
28
29
  Data p[10];
29
30
  Data *q = &p;
@@ -33,11 +34,13 @@
33
34
  fo = fopen(no,"w");
34
35
 
35
36
  input(fi, q);
36
- int d = check(fi, budget);
37
+ int d = check(fi);
37
38
  if(d==0) return 0;
39
+ rep(i,10) {
40
+ printf("%s %f %d\n", (q+i)->name, (q+i)->price, (q+i)->amount);
41
+ }
38
42
 
39
43
 
40
-
41
44
  return 0;
42
45
  }
43
46
 
@@ -45,7 +48,7 @@
45
48
  printf("insert your budget!!\n");
46
49
  scanf("%f", &budget);
47
50
  rep(i,m){
48
- fscanf(fi, "%s %f %d", (data+i)->name, (data+i)->price, &(data+i)->amount);
51
+ fscanf(fi,"%s %f %d", (data+i)->name, &(data+i)->price, &(data+i)->amount);
49
52
  }
50
53
  }
51
54
  //a is amount of products
@@ -54,16 +57,15 @@
54
57
  printf("%s %f %d\n", (data+i)->name, (data+i)->price, a);
55
58
  }
56
59
 
57
- int check(Data* data, int x) {
60
+ int check(Data* data) {
58
61
  int f = 0;
59
62
  rep(i,m) {
60
- if((data+i)->price <= x) f++;
63
+ if((data+i)->price <= budget) f++;
61
64
  }
62
65
  if(f==0) printf("your money is not enough");
63
66
  return f;
64
67
  }
65
68
 
66
-
67
69
 
68
70
 
69
71
 

3

コードの修正

2020/02/12 16:16

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -15,12 +15,12 @@
15
15
  char name[30];
16
16
  float price;
17
17
  int amount;
18
- }Data
18
+ }Data;
19
19
 
20
20
  void input(FILE*, Data*);
21
21
  void output(FILE*, Data*, int, int );
22
22
  int check(Data*, int);
23
- void search(Data*);
23
+
24
24
  int m = 10; //amount of the products
25
25
 
26
26
  float budget;
@@ -33,7 +33,7 @@
33
33
  fo = fopen(no,"w");
34
34
 
35
35
  input(fi, q);
36
- int d = check(f, budget);
36
+ int d = check(fi, budget);
37
37
  if(d==0) return 0;
38
38
 
39
39
 
@@ -42,17 +42,16 @@
42
42
  }
43
43
 
44
44
  void input(FILE* fi, Data* data){
45
- int x;
46
45
  printf("insert your budget!!\n");
47
46
  scanf("%f", &budget);
48
47
  rep(i,m){
49
- fscanf(f, "%s %f %d", (data+i)->name, (data+i)->price, &(data+i)->amount);
48
+ fscanf(fi, "%s %f %d", (data+i)->name, (data+i)->price, &(data+i)->amount);
50
49
  }
51
50
  }
52
51
  //a is amount of products
53
52
  void output(FILE* fo, Data* data, int i, int a) {
54
53
  fprintf(fo, "%s %f %d\n", (data+i)->name, (data+i)->price, a);
55
- printf("%s %f %d\n", (data+i)->name, (data+i)->price, a)
54
+ printf("%s %f %d\n", (data+i)->name, (data+i)->price, a);
56
55
  }
57
56
 
58
57
  int check(Data* data, int x) {
@@ -60,15 +59,12 @@
60
59
  rep(i,m) {
61
60
  if((data+i)->price <= x) f++;
62
61
  }
63
- if(f==0) printf("you don't have enough money");
62
+ if(f==0) printf("your money is not enough");
64
63
  return f;
65
64
  }
66
65
 
67
66
 
68
67
 
69
- void search(Data* data) {
70
-
71
- }
72
68
 
73
69
 
74
70
 

2

コードの修正

2020/02/12 15:52

投稿

gekko
gekko

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- すべての組み合わせの列挙
1
+ オードのすべての組み合わせの列挙
body CHANGED
@@ -35,9 +35,9 @@
35
35
  input(fi, q);
36
36
  int d = check(f, budget);
37
37
  if(d==0) return 0;
38
- float min = fmin(q);
39
38
 
40
39
 
40
+
41
41
  return 0;
42
42
  }
43
43
 

1

コードの修正

2020/02/12 15:43

投稿

gekko
gekko

スコア16

title CHANGED
File without changes
body CHANGED
@@ -20,7 +20,6 @@
20
20
  void input(FILE*, Data*);
21
21
  void output(FILE*, Data*, int, int );
22
22
  int check(Data*, int);
23
- float fmin(Data*);
24
23
  void search(Data*);
25
24
  int m = 10; //amount of the products
26
25
 
@@ -65,13 +64,7 @@
65
64
  return f;
66
65
  }
67
66
 
68
- float fmin(Data *data) {
67
+
69
- int x = 10001001;
70
- rep(i,m) {
71
- if(x<(data+i)->price) x = (data+i)->price;
72
- }
73
- return x;
74
- }
75
68
 
76
69
  void search(Data* data) {
77
70