看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
rothschilds:我懂了~~實在不曉得怎樣表達我的感謝之意....... 03/31 19:47
rothschilds:還讓您打這一大篇 >//////< 03/31 19:47
loveme00835:我打的比起其他大大還算少的耶0.0 03/31 19:48
rothschilds:可是很清楚,後面要用到超多次這功能,本來還很頭痛說 03/31 19:50
rothschilds:程式真的要懂的人點一下 >///////< 03/31 19:50
ilovebbs:TempA[ i ] = x; i += 1; 可以融合成TempA[i++] = x; 03/31 23:27
ilovebbs:我承認我很無聊..囧> 03/31 23:31
loveme00835:我也這麼想, 但是為了讓原po了解步驟, 還是一步一步來 03/31 23:32
ledia:換成 TempA[i++] = x; 沒有比較好 03/31 23:58
ilovebbs:是喔..@@ why? 04/01 00:11
VictorTom:因為Simple is Best吧:) 04/01 00:17
ilovebbs:喔喔...我以為那樣是比較Simple..XD 04/01 01:38
loveme00835:愈直覺愈好, 短不一定好 ^^" 04/01 01:44
ledia:寫程式是個亟需設身處地為別人設想的工作 04/01 09:47
ledia:對很多人來說 TempA[i++] = x; 的行為是不明確的 04/01 09:47
ledia:或者說是不能由反射動作看懂在做甚麼的 XD 04/01 09:47
VictorTom:程式碼不是越短效能就越好, 現在的compiler通常也可以處 04/01 10:04
VictorTom:理這種程度的優化(或者是太trivial了所以根本不用處理) 04/01 10:05
VictorTom:所以"效能"反而在開發者如何有效率的看懂與維護. 04/01 10:05
VictorTom:用VC2008寫了簡單的小程式去比兩個i++的結果.... 04/01 10:06
VictorTom:Disasm來看code其實一模一樣....XD 04/01 10:07