The Dole Queue UVA - 133(依次抓走做夫妻肺片)

算法上那本紫书.. 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值