Re: [問題] 兩串數字,凡出現2次以上的數字只印出ꐠ…

看板C_and_CPP (C/C++)作者 (鬼翼&娃娃魚)時間16年前 (2009/06/13 19:18), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《Jyie (羽球幼幼班)》之銘言: : a[10]={11,23,15,16,78,14,77,34,19,46} : b[10]={46,78,22,67,98,99,16,15,64,11} : 這兩串數字同樣數字只印出一次,顯示結果要是: : 11,23,15,16,78,14,77,34,19,46,22,67,98,99,64 : 請問要他那樣顯示該如何寫? : 想過用兩層迴圈寫:(好像不行) : for(i=0;i<10;i++) : { : for(j=0;j<10;j++) : { : if(a[i] = = b[j] ) : printf.........; : } : } : 小弟想用串列寫多項式相加的程式,但要印出結果遇到上面那種問題,不知道該怎麼做! 小弟我以為zlw大已經提示的很清楚了說....@_@" 先假設a[]裡不會有重複的, b[]裡也不會有重複的.... 所以現在要印的時候是要避免印出a[]b[]裡都有的數.... Step 1. 先把 a[] 全部印完. Step 2. 拿b[0]和a[]全部element判斷, 如果沒有相等的就印出來. Step 3. Repeat Step2, 直到b[]裡從頭到尾都跑過. 目前您卡在關鍵在Step2, 其實它的邏輯也不複雜.... 只是可能需要搭配一個flag來記錄到底b[0]存不存在於a[].... BOOL bConflict = FALSE FOR(i = 0 ~ Length of A[]) { IF(b[0] == A[i]) { bConflict = TRUE BREAK } } IF(bConflict == FALSE) { PRINT b[0] } 因為小弟我懶得寫的太精確, 所以上面是混雜著C style的psuedo code.... 現在有了Step 2了, Step 3您需要做的只是用另一個迴圈把它包起來.... 話說, 其實拿loop的index判斷一下, 就算沒有那個bConflict也做得出來.... 不過這樣寫邏輯與想法應該比較清楚明白, 最佳化什麼的等寫得出來再說吧:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 222.66.238.68
文章代碼(AID): #1ACuiDg6 (C_and_CPP)
文章代碼(AID): #1ACuiDg6 (C_and_CPP)