作者loveme00835 (恋さや)
看板C_and_CPP
標題Re: [問題] 找陣列中多個最小值,並回找最小值位置
時間Wed Mar 31 19:12:14 2010
※ 引述《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