質問編集履歴

2

2018/10/29 17:57

投稿

tyom999
tyom999

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,201 +1 @@
1
1
  ファイル名(data.txt)を入力し、そのファイルからアイテム数、各アイテムの重さ、価値の順に読み込んで、貪欲算法の結果を示すプログラムを示したいです。
2
-
3
- やりたいことは、
4
-
5
- ①取り出したデータの(商品の価値÷重さ)を計算
6
-
7
- ②計算して出した値を降順に並べ替える。
8
-
9
- ③並べ替えた数値が大きい順に対応する商品の価値のデータを121を越さないように足し算していく。
10
-
11
- ④足し算したものの内容(袋の中に詰めたもの)を表示
12
-
13
- です。コンパイルしてエラーは出ないのですが、思ったような実行結果が表示されません。どこを改善すればちゃんとした実行結果が得られるのでしょうか?
14
-
15
- ```
16
-
17
- #include <stdio.h>
18
-
19
- #include <string.h>
20
-
21
- #include <stdlib.h>
22
-
23
-
24
-
25
- const int NMOJI=50; /* ファイル名の長さ */
26
-
27
- const int MAX_ITEM=100; /* アイテム数最大値 */
28
-
29
-
30
-
31
- int main()
32
-
33
- {
34
-
35
- FILE *fp;
36
-
37
- int i,j,maxpos,itemp;
38
-
39
- int nitem,nn; /* アイテムの総数, ナップサックに入れたアイテムの数 */
40
-
41
- int indx[MAX_ITEM];
42
-
43
- int list[MAX_ITEM]; /* ナップサックに入れたアイテムの番号 */
44
-
45
- double capacity; /* ナップサックの容量 */
46
-
47
- double temp;
48
-
49
- double total_w, total_v; /* ナップサックに入れたアイテムの重さ合計, 価値合計 */
50
-
51
- double weight[MAX_ITEM],value[MAX_ITEM],unit_val[MAX_ITEM]; /* アイテムの重さ, 価値, 単位重さあたりの価値 */
52
-
53
- int count=0;
54
-
55
- double max;/*単位重さの価値の最大値を定義*/
56
-
57
- char file_name[NMOJI]; /* データファイル名 */
58
-
59
-
60
-
61
- printf("Data file name: ");
62
-
63
- scanf("%s",file_name);
64
-
65
-
66
-
67
- if ((fp = fopen(file_name,"r")) == NULL){ /* ファイルオープンに失敗した場合は終了 */
68
-
69
- printf("%s: ファイルをオープンできません!\n",file_name);
70
-
71
- return -1;
72
-
73
- }
74
-
75
-
76
-
77
- printf("Knapsack capacity: ");
78
-
79
- scanf("%lf",&capacity);
80
-
81
-
82
-
83
- printf("データファイル名: %s\n",file_name);
84
-
85
- printf("ナップサックの容量: %10.3f\n",capacity);
86
-
87
- printf("\n");
88
-
89
-
90
-
91
- fscanf(fp,"%d",&nitem); /* アイテム数読み込み */
92
-
93
-
94
-
95
- if (nitem > MAX_ITEM){
96
-
97
- printf("アイテム数は%3d以下にしてください!\n",MAX_ITEM);
98
-
99
- return -1;
100
-
101
- }
102
-
103
-
104
-
105
- for (i=0;i<nitem;i++) /* 重さデータの読み込み */
106
-
107
- fscanf(fp,"%lf",&weight[i]);
108
-
109
- for (i=0;i<nitem;i++) /* 価値データの読み込み */
110
-
111
- fscanf(fp,"%lf",&value[i]);
112
-
113
- unit_val[i]= weight[i]/ weight[i];/*データiについてunit_valを定義*/
114
-
115
- printf("%3f",unit_val[i]);/*単位重さあたりの価値を表示*/
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
- max=unit_val[0];
124
-
125
- for(i=0;i<MAX_ITEM;i++){{
126
-
127
- for(j=i+1;j<MAX_ITEM-1;j++)
128
-
129
- {
130
-
131
- if(unit_val[j]>unit_val[i])
132
-
133
- max=unit_val[j];
134
-
135
-
136
-
137
-
138
-
139
- temp=unit_val[i];
140
-
141
- unit_val[i]=unit_val[0];
142
-
143
- unit_val[0]=temp;
144
-
145
- }}
146
-
147
- printf("並べ替え後の数字は%9f ",unit_val[i]);
148
-
149
-
150
-
151
- printf("\n");
152
-
153
-
154
-
155
- printf("%f",value[i]);
156
-
157
- for(i=0;i<MAX_ITEM;i++)
158
-
159
- total_v=value[0]+i;
160
-
161
- }
162
-
163
- if(total_v<=121)
164
-
165
- printf("袋に詰めることができたものは%dです。",count);
166
-
167
- count++;
168
-
169
-
170
-
171
-
172
-
173
-
174
-
175
- fclose(fp); /* ファイルクローズ */
176
-
177
-
178
-
179
- return 0;
180
-
181
- }
182
-
183
- /*出力結果
184
-
185
- Data file name: data.txt
186
-
187
- Knapsack capacity: 121
188
-
189
- データファイル名: data.txt
190
-
191
- ナップサックの容量: 121.000
192
-
193
-
194
-
195
- 1.000000並べ替え後の数字は 0.000000 
196
-
197
- 0.000000袋に詰めることができたものは0です。*/
198
-
199
-
200
-
201
- ```

1

コードブロックでソースを囲いました。また簡単な出力結果を入力しました。

2018/10/29 17:57

投稿

tyom999
tyom999

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- データ名を入力し、そのファイルからアイテム数、各アイテムの重さ、価値の順に読み込んで、貪欲算法の結果を示すプログラムを示したいです。
1
+ ファイル(data.txt)を入力し、そのファイルからアイテム数、各アイテムの重さ、価値の順に読み込んで、貪欲算法の結果を示すプログラムを示したいです。
2
2
 
3
3
  やりたいことは、
4
4
 
@@ -12,6 +12,8 @@
12
12
 
13
13
  です。コンパイルしてエラーは出ないのですが、思ったような実行結果が表示されません。どこを改善すればちゃんとした実行結果が得られるのでしょうか?
14
14
 
15
+ ```
16
+
15
17
  #include <stdio.h>
16
18
 
17
19
  #include <string.h>
@@ -177,3 +179,23 @@
177
179
  return 0;
178
180
 
179
181
  }
182
+
183
+ /*出力結果
184
+
185
+ Data file name: data.txt
186
+
187
+ Knapsack capacity: 121
188
+
189
+ データファイル名: data.txt
190
+
191
+ ナップサックの容量: 121.000
192
+
193
+
194
+
195
+ 1.000000並べ替え後の数字は 0.000000 
196
+
197
+ 0.000000袋に詰めることができたものは0です。*/
198
+
199
+
200
+
201
+ ```