藍橋杯 接水問題 解題思路

問題描述
  學校裏有一個水房,水房裏一共裝有m 個龍頭可供同學們打開水,每個龍頭每秒鐘的 供水量相等,均爲1。 現在有n 名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從1 到n 編號,i 號同學的接水量爲wi。接水開始時,1 到m 號同學各佔一個水龍頭,並同時打 開水龍頭接水。當其中某名同學j 完成其接水量要求wj 後,下一名排隊等候接水的同學k 馬上接替j 同學的位置開始接水。這個換人的過程是瞬間完成的,且沒有任何水的浪費。即 j 同學第x 秒結束時完成接水,則k 同學第x+1 秒立刻開始接水。若當前接水人數n’不足m, 則只有n’個龍頭供水,其它m−n’個龍頭關閉。 現在給出n 名同學的接水量,按照上述接水規則,問所有同學都接完水需要多少秒。
輸入格式
  第1 行2 個整數n 和m,用一個空格隔開,分別表示接水人數和龍頭個數。 第2 行n 個整數w1、w2、……、wn,每兩個整數之間用一個空格隔開,wi 表示i 號同 學的接水量。
輸出格式
  輸出只有一行,1 個整數,表示接水所需的總時間。
樣例輸入
5 3
4 4 1 2 1
樣例輸出
4
樣例輸入
8 4
23 71 87 32 70 93 80 76

=========================================
解題思路
人數個人所需量
23 71 87 32 70 93 80 76
----------m1-- m2-- m3-- m4
第1秒 ----23718732
第23秒 –70 --48 ----64— 9
第32秒—61 --39 ----55 — 93
第71秒 --29-- 80 — 16---- 54
第87秒 --13-- 64----- 76 --38
第100秒 --0 – 51----- 63 – 25
第125秒 --0----26 ---- 38—0
第151秒 —0 —0 -----12----0
第163秒 全部接水完畢

由此 每次取min的值相加
每執行一次循環 進行一次排序 把最小值放最左
最後把每次的min值進行相加
23-- 32-- 71 --87
9 --48 --64 --70
16 --29 --54 --80
13 --35 --64-- 76
25 --51-- 63
23 --38
12
23+9+16+13+25+23+12=163

一下代碼還不完整 看看解題思路就行 …😐.

#include<stdio.h>
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);//輸入人數和龍頭數 
	int i,j,a[n],min,b[m],c,xb=1,cnt;
	for(i=0;i<n;i++)
	{scanf("%d",&a[i]);} 
		for(i=0;i<m;i++)
	  {
		b[i]=a[i];
	   }
	while(xb)
	{
		min=10000;
		for(i=0;i<m;i++)
	  {
	  	if(b[i]!=0)
	     {min=(min>b[i]?b[i]:min);}
	     else continue;
	   }
	   printf("%d\n",min);
	   	c=c+min;
	 	for(i=0;i<m;i++)
	  {
		b[i]=b[i]-min;
		if(b[i]==0)
		{
			b[i]=a[m];
			m++;
		}
	   }
		 cnt=0;
		 for(i=0;i<m;i++)
	     {
	     	if(b[i]==0)
	     	{
	     	    cnt++;
			 }
		 }
	    if(cnt==m)
	    {
	    	xb=0;	
		}
	}
	printf("%d",c);
	return 0;

 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章