演算法練習題 4(水龍頭接水問題)

2021-10-06 20:26:46 字數 1474 閱讀 4908

我:

#include using namespace std;

/*n和m 表示的是接水人數 和水龍頭個數

第二行 n個正整數 表示的是 w1,w2……wn 表示i號同學的接水量

輸出只有一行 表示 接水所需的總時間

如:5 3

4 4 2 1

輸出 4

1<=n<=10000,1<=m<=100;

1<=wi<=100.

*/int getminindex(int m, int wm)

} return minw;

}int main() ;//接水量

cin >> n>>m;

for (int i = 1; i <=n; i++)

int maxw = 0;

int wm[105] = ;//1到m個水龍頭分別的接水量

for (int i = 1; i <= n; i++)

else

} for (int i = 1; i <= m; i++) }

cout << maxw << endl;

return 0;

}

大佬:

/*

陣列 w 而言:

下標: 陣列下標去表示每個人的編號

元素值: 表示接水量

w[1] = 5 --> 1 號的接水量是 5

關於陣列 ar

下標: 表示水龍頭的編號

元素值: 去表示該水龍頭上消耗的時間

ar[1] = 4 --> 1 號水龍頭的供水量是 4,即消耗了 4 秒鐘

*/int w[10001] = , ar[101] = ;

int n, m, max = 0;

cin >> n >> m;

// 得到每個人的接水量

for(int i = 1; i <= n; i++)

// 先派 m 個人去接水

for(int i = 1; i <= m; i++)

// 編號 m+1 -- n 的同學在排隊

for(int i = m+1; i <=n; i++)

} // 此時,找出耗時最小的第 k 號水龍,意味著這個水龍頭上會有人補進來

// 第 i 號同學補到第 k 個水龍頭

ar[k] = ar[k] + w[i]; }

for(int i = 1; i <= m; i++)

} cout << max << endl;

總結:對比了下,好像我確實不應該從1開始,應該直接從2開始

int getminindex(int m, int wm) 

} return minw;

}

演算法練習題

題目描述 給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前...

演算法練習題4 最長連續序列

力扣 128.最長連續序列 分析 這道題稍微有些難度,雖然一開始也想到了要使用map,但是沒有答案中使用的那麼靈活。這道題的思路是,先遍歷以便陣列,使用set記錄資料並去重 然後再遍歷一遍陣列,這次遍歷中,尋找連續數列的最小起始點,然後計數。更困難的是,最長不連續,該如何實現呢?class solu...

C語言練習題 4

1.讀程式,寫出你的分析步驟,得出結果。typedef int func1 int 定義函式型別,名為func1 typedef int func2 int int int 定義函式型別,名為func2 int inc int a 返回a 1 int multi int a,int b,int c ...