Re: [問題] 找陣列中多個最小值,並回找最小值位置

看板C_and_CPP (C/C++)作者 (恋さや)時間16年前 (2010/03/31 19:12), 編輯推噓8(8013)
留言21則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《rothschilds (法蘭克福小商人)》之銘言: : 遇到的問題: (題意請描述清楚) : 我要找before_buttle[15]的最小值(不只一個) : 並回找最小值在before_buttle[15]中的位置 : 存到一個新陣列TempA[15]中 {最小值位置1,最小值位置2,999,999,...} : 最小值是4,分別是before_buttle[1]跟[10] : 有計算有幾個最小值的count_a : 一開始想把TempA長度設成count_a=2,但不會宣告 : 所以希望最後跑出{1,10,999,999,.....} (一開始把int TempA[15]={999};) : 奇怪的是,只會顯示最後一個最小值 : TempA[0]=10 (原本應該是1) : TempA[1]=10 : TempA[2]=0 (原本應該是999) : 能請教問題出在哪邊嗎? 很感謝 @@ : 有問題的code: (請善用置底文標色功能) : int TempA[15]={999}; 問題應該是在這邊 : for(x=0;x<=14;x++) : { : if(before_buttle[x]==f) : { : for(i=0;i<=count_a-1;i++) : { : TempA[i]=x; : } : } : } 1.裡面的迴圈在 x == 10 的時候, 會把你之前存的兩個1換成兩個10 2.關於陣列TempA的初始化, 雖然TempA有15個元素, 因為你只提供了一個初始值 剩下的編譯器不知道怎麼做, 所以採用預設的初始值(0)來做, 如果要全部都 變成 999, 可以這樣寫 : int TempA[15] = { 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999 }; 或是改用迴圈的方式去跑, 建議的程式碼: int TempA[ 15 ]; // 用迴圈來初始化, 這邊條件改成15比較知道是在跑整個陣列 for ( int i = 0; i < 15; ++i ) TempA[ i ] = 999; i = 0; // 第一個發現的最小值所在的索引要放在TempA[0]的位置 for ( x = 0; x < 15; ++x) { /* 如果發現了最小值, 索引存到TempA中, 下一個最小值索引 * 應該存在下一個位置 */ if ( before_buttle[ x ] == f ) { TempA[ i ] = x; i += 1; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115

03/31 19:47, , 1F
我懂了~~實在不曉得怎樣表達我的感謝之意.......
03/31 19:47, 1F

03/31 19:47, , 2F
還讓您打這一大篇 >//////<
03/31 19:47, 2F

03/31 19:48, , 3F
我打的比起其他大大還算少的耶0.0
03/31 19:48, 3F

03/31 19:50, , 4F
可是很清楚,後面要用到超多次這功能,本來還很頭痛說
03/31 19:50, 4F

03/31 19:50, , 5F
程式真的要懂的人點一下 >///////<
03/31 19:50, 5F

03/31 23:27, , 6F
TempA[ i ] = x; i += 1; 可以融合成TempA[i++] = x;
03/31 23:27, 6F

03/31 23:31, , 7F
我承認我很無聊..囧>
03/31 23:31, 7F

03/31 23:32, , 8F
我也這麼想, 但是為了讓原po了解步驟, 還是一步一步來
03/31 23:32, 8F

03/31 23:58, , 9F
換成 TempA[i++] = x; 沒有比較好
03/31 23:58, 9F

04/01 00:11, , 10F
是喔..@@ why?
04/01 00:11, 10F

04/01 00:17, , 11F
因為Simple is Best吧:)
04/01 00:17, 11F

04/01 01:38, , 12F
喔喔...我以為那樣是比較Simple..XD
04/01 01:38, 12F

04/01 01:44, , 13F
愈直覺愈好, 短不一定好 ^^"
04/01 01:44, 13F

04/01 09:47, , 14F
寫程式是個亟需設身處地為別人設想的工作
04/01 09:47, 14F

04/01 09:47, , 15F
對很多人來說 TempA[i++] = x; 的行為是不明確的
04/01 09:47, 15F

04/01 09:47, , 16F
或者說是不能由反射動作看懂在做甚麼的 XD
04/01 09:47, 16F

04/01 10:04, , 17F
程式碼不是越短效能就越好, 現在的compiler通常也可以處
04/01 10:04, 17F

04/01 10:05, , 18F
理這種程度的優化(或者是太trivial了所以根本不用處理)
04/01 10:05, 18F

04/01 10:05, , 19F
所以"效能"反而在開發者如何有效率的看懂與維護.
04/01 10:05, 19F

04/01 10:06, , 20F
用VC2008寫了簡單的小程式去比兩個i++的結果....
04/01 10:06, 20F

04/01 10:07, , 21F
Disasm來看code其實一模一樣....XD
04/01 10:07, 21F
文章代碼(AID): #1BiouHEU (C_and_CPP)
文章代碼(AID): #1BiouHEU (C_and_CPP)