1. 程式人生 > >The Dole Queue UVA

The Dole Queue UVA

演算法上那本紫書.. P82

10%9是1   19%10就像是9%10 是9

goto的思想..... ?其實不是很麻煩..  寫個函式好了

然後就是一定要注意邊界... 還有比如p+d%n那個,一個是括號,另一個10 的時候試一下....

具體的寫在註釋裡了.....邊界搞清楚if possible

///練習鍵盤打字速度和減少錯誤率... 手機打字不算什麼
///   真的..... 以後也是啊  聊天請選電腦  我的天啊啊 竟然都可以一邊摸魚一邊聊天
/// 聊2 個的同時還處理資料並A 了一道題.... 太厲害了
///....
#include<iostream>
#include<iomanip>
//這程式碼可是我看完書之後自己打的!!(((
// (((
// 真的效率好底我太懶了我要把手機扔了T T
using namespace std;
int n, m, k; int a[25];
int go(int p, int  d, int  t)
{
	while (t--)
	{
		do
		{// 10 +-1 +1= =9
			p = (p + d +n-1) % n +1;//應用到 如果p=0,d=-1的時候%n就沒了
			// 然後就會卡住,但是你是%n所以加上一個無害的n就可以了
			//不妨設p+d為0   兩個式子的差距顯然
				///第一個式子結果是1~n之間   第二個式子是0~(n–1)(我的天啊!
			//時時刻刻想著0!!!!!
			//  不不不不.....主要是特殊情況,比如p+d=10,如果%n就是0,但是如果是p+d+n-1%n就是n-1,再+1=10

			//所以為啥不用i=0;i<n...作孽啊
		}  while (a[p] == 0);}//???  如果是0 的話,繼續往下跑,直到不是0為止
	//do while 的進步之處在於do裡面的至少可以迴圈一次,然後這個p是下一個要被抓走做夫妻肺片的人
	//如果這個人的確又不是0,就可以滿足條件了,跳出迴圈
// 如果這個人是0,就是你經過查詢找到了夫妻肺片材料是0,不符合條件,繼續do,按相同的條件繼續進行查詢

	//那麼這個判斷條件...    p = (p + d + n - 1) % n + 1; 
	///////////////// 10-1+10-1= 8  8 +1=9
	//並且 在這裡有個什麼呢,被抓走變成0 的人要退出了,不參與,這裡用do while下標就很方便
	//門號還沒變,但是已經變成0 了,對你而言還是走一樣的t步數來完成使命.


	return p;
}
int main()
{
	
	while (cin >> n >> k>> m&&(n!=0&&m!=0&&k!=0))
	{
		//初始化!
		for (int i = 1; i <= n; i++)
			a[i] = i;
		int left = n;

		int p1 = n;
		int p2 = 1;
		
		
		while (left){
			p1=go(p1, 1, k);
			p2=go(p2, -1, m);
				cout<<setw(3) << p1;
				left--;
			if (p1 != p2)
			{
				cout <<setw(3)<< p2 ;//不能在這輸出啊= =
				left--;
			}
			a[p1] = a[p2] = 0;//這都能理解,人死了錢沒花了要寫好一個=0
			if (left)cout << ",";
		}cout << endl;

	}
	return 0;
}