線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:814
推到 Plurk!
推到 Facebook!

[問題]環狀array的問題

尚未結案
plihui
初階會員


發表:88
回覆:96
積分:41
註冊:2003-07-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-28 23:42:27 IP:218.168.xxx.xxx 未訂閱
           int th_his1[64],th_his2[64];
           int diff=0,diff1=0,diff2=0;
           //假設th_his1[],th_his2[]早已設定好
           
           //問題段
           //假設th_his2為th_his1平移值之後或是反轉之後的陣列
           //ex: th_his1[]={1,2,3}
           //則 th_his2[]={2.3.1}或是{3,2,1}
           //求th_his2為th_his1平移幾個位置或反轉平移幾個位置
           for(int shift=0;shift<64;shift  )
           {
            diff=0,diff1=0,diff2=0;
            for(int index=0;index<64;index  )
            {
             diff1 =fabs(th_his1[index]-th_his2[(index shift)c]);
                                                              ^^^
             //請問是取63還是64的餘數ㄚ?
             diff2 =fabs(th_his1[index]-th_his2[63-(index shift)c]);
                                                ^^^^^^^^^^^^^^^^^^^
            //從63或64開始? 
            }
            diff=(diff1diff))?diff:min_diff;
           }
問題: 假設th_his2為th_his1平移值之後或是反轉之後的陣列 ex: th_his1[]={1,2,3} 則 th_his2[]={2.3.1}或是{3,2,1} 求th_his2為th_his1平移幾個位置或反轉平移幾個位置 使得th_his2-th_his1絕對值最小 我是利用Array去實做(假設陣列大小64) 想請問大大: Q1:請問是取63還是64的餘數ㄚ? Q2:如果從尾端開始算,若th_his2[]為th_his1[]反向,那就上面程式碼 ^^^^^^部分,到底該取63還是64阿?
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-29 00:57:40 IP:211.76.xxx.xxx 未訂閱
plihui 您好:
diff1 =fabs(th_his1[index]-th_his2[(index shift)c]);
                                                      ^^^
如果您的意思是希望取值的順序為:0,1,2,...,62,63,0,1,2....的話,那就要用64。 至於您的反轉我並不確定它的意思。 底下有個next(.)函式應該對您有幫助, 主要在產生循環的數列,由大到小或由小到大均可。
//---------------------------------------------------------------------------
int next(int value, int len, int skip=1) // including both direction
{ value  = skip;
  if ( skip<0 ) value  = len;
  if ( value>=len) value -= len;
  return (value);
}    void __fastcall TForm1::Button1Click(TObject *Sender)
{ AnsiString msg="";
  int index = 2;      for (int k=0; k<10; k  )
     { index = next(index, 7);
       msg  = IntToStr(index)  "\n";
     }
  ShowMessage(msg);      index = 2;
  msg = "";
  for (int k=0; k<10; k  )
     { index = next(index, 7, -1);
       msg  = IntToStr(index)  "\n";
     }
  ShowMessage(msg);
}
//---------------------------------------------------------------------------
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
plihui
初階會員


發表:88
回覆:96
積分:41
註冊:2003-07-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-29 01:43:57 IP:218.168.xxx.xxx 未訂閱
引言: plihui 您好:
diff1 =fabs(th_his1[index]-th_his2[(index shift)c]);
                                                      ^^^
如果您的意思是希望取值的順序為:0,1,2,...,62,63,0,1,2....的話,那就要用64。
謝R大: 反轉的意思: 用舉例來說 : ex1 a[5]={0,1,2,3,4}; ra[5]={4,3,2,1,0};//當作是反轉矩陣吧? ->把ra從array後端來看{0,1,2,3,4}就是a的反轉(而且沒有平移) ex2: ra2[5]={0,4,3,2,1} ->ra2為a反轉且右移1位{1,2,3,4,0} 還是用舉例的好...... 希望R大幫忙解1下....
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-29 10:27:44 IP:211.76.xxx.xxx 未訂閱
diff2 =fabs(th_his1[index]-th_his2[63-(index shift)c]);
diff2 =fabs(th_his1[index]-th_his2[63-(index shift)%64]);
如果是要符合您所說的,那就要改成上面的樣子囉! 其實next(.)函式就具有這樣的能力,您可以利用skip的值來讓它往前或往後,可以參考一下。 不過我想解決了自己的疑惑,才是讓人覺得成長與快樂的事! 說了這麼多,不知是不是解決了問題了?
系統時間:2024-06-26 9:08:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!