習題 4_8 uva12108 特別困的學生(小模擬)

這題要看圖,只要對於圖看懂了,就莫得問題了,
我採用的是判斷當前,每次循環 +1,如果超出週期,則說明人醒了要等於 1
然後判斷當前睡着還是醒着就行了
接下來是對於臨界於即將睡覺的人羣的判斷,如果他只能堅持,那莫得辦法,讓他 週期爲0,等下一次加一則剛好爲 1 完美!

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n,a[23],b[23],zhou[23];
	for (int t = 1; scanf("%d",&n)==1 && n; t++)
	{
		int fen = 1,ok = 0;    //分就是當前時間
		  for (int i = 0; i < n; i++)
		      scanf("%d%d%d",&a[i],&b[i],&zhou[i]);
		int shui = 0,xin = 0;    //睡的和醒的 
		for (int i = 0; i < n; i++)     //剛開始要先判斷 
		{
			if(zhou[i] > a[i]) shui++;
			else xin++;
		}
		if(xin == n) ok = 1;
		if(!ok)
		{
			for (int i = 2; i < 10000;i++)  //如果都10000次還沒找到那就是莫得了
			{
				xin = 0; shui = 0;
				for (int j = 0;j < n; j++)//看的是當前 
				{
					zhou[j]++; 
					if(zhou[j] > a[j]+b[j]) zhou[j] = 1;//如果此時大於則是醒了 
					if(zhou[j] <= a[j]) xin++;
					else shui++;
				}
				if(xin == n)
				{
					ok = 1;
					fen = i; break;
				}
				for (int j = 0; j < n; j++)//判斷其能否意志堅定 
				{
					if(zhou[j]==a[j] && xin >= shui) zhou[j] = 0; 
				}
				
			}
		} 
		printf("Case %d: ",t);
		printf("%d\n",(ok)? fen: -1);
	}
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章