題目:一副從1到n的牌,每次從牌堆頂取一張放桌子上,再取一張放牌堆底,直到手上沒牌,最後桌子上的牌是從1到n有序,設計程式,輸入n,輸出牌堆的順序陣列。(題目**於一篇知乎上的文章)
思路:在原牌堆a[n]以1到n的方式進行標記(即 a[0]=1,a[1]=2...),通過上述操作,產生新牌堆b[n]。若b[k]中的數值t+1,為原牌堆a[t]對應的位置,說明新牌堆第k+1張牌是原牌堆的第t+1張牌。由題意的,新牌堆第k+1張牌上的值為k+1,由此得原牌堆t+1張牌的值為k+1。a[t]=k+1。因為b[k]=t+1,所以a[b[k]-1]=b[k]。
為了保證空間更優,使用迴圈陣列的方式,來實現在牌堆底加牌的步驟。
**:
/*
* 一副從1到n的牌,每次從牌堆頂取一張放桌子上,再取一張放牌堆底,直到手機沒牌,最後桌子上的牌是從1到n有序,設計程式,輸入n,輸出牌堆的順序陣列
*/public class changeindexandvalue
for(int l=0;lfor(int h=0;hsystem.out.println();
for(int p=0;p}
public static void main(string args)
}
演算法心得1 交換值 陣列移動
要交換兩個變數的值很簡單,只需要這麼寫 void swap int a,int b 當然可以不用中間變數交換值,好像能省一點記憶體空間,但是實際意義也不是很大,但在面試或筆試中常常出現這個題目,可能會一下想不出來,但是仔細一想,發現這就類似解乙個二元一次方程,如下 void swap int a,i...
最基本的演算法(1) 交換
交換演算法在c c 中有以下幾種實現方式 1.實現交換演算法 include using namespace std intmain 2.做成通用的函式 值傳遞 include using namespace std void swap int a,int b int main void swap ...
1 最基本的演算法 交換
c c 中交換演算法的幾種方式 1 include2 include3 4 using namespace std 5 第二種方法,定義乙個函式 6void swap int x,int y 7 第三種方法,8void swap1 int px,int py 9 第四種方法,巨集定義 10 defi...