變數之間的大小比較 |
尚未結案
|
sakae
一般會員 發表:2 回覆:3 積分:1 註冊:2004-06-24 發送簡訊給我 |
程式如下:
if (sum<15)
{
cx=abs(15-aa);cy=abs(15-bb);
.
.
}
每當符合sum<15之後,程式便會傳入一組aa和bb的值(任意整數)
因為我要在各個零散的aa和bb的組合中,取得最接近aa=15和bb=15的組合,故我把它們和15相減取絶對值.我打算先比較cx,再從中比較cy,最後才選定一組aa和bb.
以下是我遇到的問題:
因為每傳入一組aa和bb後,cx和cy的值也立即被改變了,所以我無法將它們作比較,請問各位有什麼解決的好法子嗎?謝謝!
|
nlj859
資深會員 發表:139 回覆:375 積分:322 註冊:2004-03-20 發送簡訊給我 |
引言: 程式如下: if (sum<15) { cx=abs(15-aa);cy=abs(15-bb); . . } 每當符合sum<15之後,程式便會傳入一組aa和bb的值(任意整數) 因為我要在各個零散的aa和bb的組合中,取得最接近aa=15和bb=15的組合,故我把它們和15相減取絶對值.我打算先比較cx,再從中比較cy,最後才選定一組aa和bb. 以下是我遇到的問題: 因為每傳入一組aa和bb後,cx和cy的值也立即被改變了,所以我無法將它們作比較,請問各位有什麼解決的好法子嗎?謝謝!hello, 把一組(aa,bb)丟進去計算,cx和cy一定會變,這是很正常的. 看你題目需求 "cx=abs(15-aa);cy=abs(15-bb); ..... " ,這樣好像跟下一組計算無關,所以這組所計算的cx和cy並不會影響到你下一組的計算.(是不是要把......那裡再寫清楚一點,看你要怎麼處理?) 可否在加以解釋你要怎麼比較還有題目比較詳細的解說? 發表人 - nlj859 於 2004/07/18 19:24:40 |
sakae
一般會員 發表:2 回覆:3 積分:1 註冊:2004-06-24 發送簡訊給我 |
不好意思!我再說明一次我的問題.
程式中有一廻圈,其中包含下列片段:
if (sum<15)
{
cx=abs(15-aa);cy=abs(15-bb);
.
.
}
廻圈執行時會運算出aa,bb,和sum三個值,我在廻圈中再加入上述判斷式.
也就是說,每執行一次廻圈,會有一個sum,一個aa和一個bb.
當sum<15時,我將那一次廻圈所算出的aa和bb值代入cx=abs(15-aa);cy=abs(15-bb);作運算.經由記錄最小的cx和cy去找最接近aa=15和bb=15的組合(aa,bb) 但cx和cy一定會變,我想請教有什麼方法,能比較廻圈裡每次的cx和cy值,只留下最小的cx和cy值那一次廻圈時的aa和bb的值?謝謝!
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
sakae你好:
參考下面的code。還有你要的最小值是cx+cy的最小嗎?還是平方和的最小?
//先宣告四個變數,用來儲存最小的cx,cy,aa,bb。 //且一開始就設定min_cx,min_cy初值為最大的int值 //以讓第一個aa,bb可以被assign給min_aa,min_bb int min_cx = MAXINT,min_cy = MAXINT; int min_aa,min_bb; //--------------------------------------------- //更改判斷式 if(sum < 15) { cx = abs(15-aa); cy = abs(15-bb); if(cx cy < min_cx min_cy) //這裡是要總合的最小嗎?還是? { min_cx = cx; min_cy = cy; min_aa = aa; min_bb = bb; } }發表人 - pwipwi 於 2004/07/18 21:51:56 |
nlj859
資深會員 發表:139 回覆:375 積分:322 註冊:2004-03-20 發送簡訊給我 |
Hello Sakae, 請參考底下程式碼:
/* 程式中有一?圈,其中包含下列片段: if (sum<15) { cx=abs(15-aa);cy=abs(15-bb); . . } 迴圈執行時會運算出aa,bb,和sum三個值,我在?圈中再加入上述判斷式. 也就是說,每執行一次?圈,會有一個sum,一個aa和一個bb. 當sum<15時,我將那一次迴圈所算出的aa和bb值代入cx=abs(15-aa);cy=abs(15-bb);作運算.經由記錄 最小的cx和cy去找最接近aa=15和bb=15的組合(aa,bb) 但cx和cy一定會變,我想請教有什麼方法,能比較迴圈裡每次的cx和cy值,只留下最小的cx和cy值那一次 迴圈時的aa和bb的值? */ #include |
sakae
一般會員 發表:2 回覆:3 積分:1 註冊:2004-06-24 發送簡訊給我 |
sakae你好:
參考下面的code。還有你要的最小值是cx cy的最小嗎?還是平方和的最小? 謝謝您的回覆!
我要找的是:先找最小的cx,再從中找最小的cy.
舉個例子:廻圈跑完後有下列aa和bb的組合:(3,21),(14,9),(14,27),(19,22)
先作cx=abs(15-aa)後,取最小的cx,所以只剩aa為14的(14,9),(14,27)
再作cy=abs(15-bb),取最小的cy,所以bb應為9
最後我想要的是最接近(15,15)的aa和bb,以上述的情形來說就是(14,9) 謝謝!
|
nlj859
資深會員 發表:139 回覆:375 積分:322 註冊:2004-03-20 發送簡訊給我 |
|
blk5743
高階會員 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
這樣應該會得到最小的cx,cy吧(如果你一定要先比cx的話)
範例一
int TempCx,TempCy;
if (sum<15)
{
cx=abs(15-aa);
if ( cx <= TempCx )//有包含等於是因為cy可能不同
{
TempCx = cx;
cy=abs(15-bb);//cx符合條件才做cy
if ( cy < TempCy )//不包含等於是因為相同就不用更改
TempCy = cy;
}
} 如果你想要得到最小的cx cy 範例二
int TempCx = 1000,TempCy = 1000;//一個很大的值 if (sum<15)
{
if ( (cx cy) < (TempCx TempCy) )
{//符合條件TempCx,TempCy一起更改
TempCx = cx;
TempCy = cy;
}
} 如果有四組值(7,9),(9,8),(11,2),(10,14)
範例一會得到(11,2)
範例二會得到(10,14)
所以你應該是要問範例二吧(最接近15的aa,bb)
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
sakae:各家方式不同,提供另一種方式, 用static int cxMin=999,cyMin=999;建立static 宣告。 如此你可以將你程式如下 static int cxMin=999,cyMin=999; // 先設最大 if (sum<15) { cx=abs(15-aa);cy=abs(15-bb); // 進行你的比較cx和cxMin,cy和cyMin . . } 經過static 宣告的變數會保留其數據一直到程式結束為止! 例:你如果 if (cx 和 cy 與 cxMin 及cyMin 比較成立) cxMin=cx;cyMin=cy; cxMin及cyMin會被cx及cy值取代,下次你進入這function時 cxMin及cyMin將不是999而是上一次的cx及cy值。 請參考!Andy Chang 發表人 - andychang1690 於 2004/09/15 17:45:49
------
Andy Chang |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |