杭電1276士兵佇列的訓練問題

2021-07-03 20:20:02 字數 711 閱讀 8135

杭電1276士兵佇列的訓練問題

本來這題想用直接的模擬法去解答,但一看資料為5000,也還是可以,可是模擬是用陣列的話無法直接去掉被刪除的元素,用鍊錶可以完全模擬,但是鍊錶操作比較麻煩,想盡量避免鍊錶操作的使用。所以本題就想到了用兩個鍊錶來回操作來進行模擬。

首先定義兩個陣列s1,s2。s1先儲存所有士兵的編號,然後由於依次報到2的士兵都會被出列,陣列下標與編號對應,這樣就可以把陣列下標為奇數的元素轉到s2,從下標為1連續儲存。再依次報到3,士兵出列,再把在陣列s2中下標模3不等於0的元素轉移到s1中。下標為1依次儲存。這樣來回轉換,利用變數k依次記錄轉換後還剩下的元素個數,這樣來回轉換,知道k<=3時停止,對陣列s1,或者s2中的元素進行輸出

ps:注意士兵數量n<=3的情況,直接對陣列元素進行輸出。

注意兩個輸出編號之間的空格。

ac**:

#includeusing namespace std;

int main()

//t=(t+1)>>1;

t=j-1;

if(t<=3)

k=1;

for(i=1;i<=t;i++)

}t=k-1;

if(t<=3)

}if(flag==1)

cout<}if(flag==2)

cout<} }

}return 0;

}

HDU杭電1276 士兵佇列訓練問題

problem description 某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。以後從頭開始輪流進行...

HDU1276 士兵佇列訓練問題

problem description 某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。以後從頭開始輪流進行...

hdoj1276士兵佇列訓練問題

problem description 某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。以後從頭開始輪流進行...