分蘋果----網易2017內推筆試程式設計題合集(一)
阿新 • • 發佈:2019-02-06
[程式設計題] 分蘋果
n 只奶牛坐在一排,每個奶牛擁有 ai 個蘋果,現在你要在它們之間轉移蘋果,使得最後所有奶牛擁有的蘋果數都相同,每一次,你只能從一隻奶牛身上拿走恰好兩個蘋果到另一個奶牛上,問最少需要移動多少次可以平分蘋果,如果方案不存在輸出 -1。
break版,函式只有一個出口,通過率為100%:
輸入描述:
每個輸入包含一個測試用例。每個測試用例的第一行包含一個整數 n(1 <= n <= 100),接下來的一行包含 n 個整數 ai(1 <= ai <= 100)。
輸出描述:
輸出一行表示最少需要移動多少次可以平分蘋果,如果方案不存在則輸出 -1。
輸入例子:
4 7 15 9 5
輸出例子:
3感覺自己寫的程式不夠優雅,,注意,一個函式應該只有一個出口!!不要過分使用continue,而應該多使用break!
continue版,函式有多個出口,通過率為80%:
#include <iostream> #include <vector> using namespace::std; int main() { int n; while (cin >> n) { if (n <= 0) break; int sum = 0; vector<int> vec(n); for (int i = 0; i < n; ++i) { cin >> vec[i]; sum += vec[i]; } if (sum % n != 0) { cout << -1 << endl; continue; } int avg = sum / n; int result = 0; for (int i = 0; i < n; ++i) { if (vec[i] < avg) { if ((avg - vec[i]) % 2 != 0) { cout << -1 << endl; continue; } } else if (vec[i] >= avg) { if ( ( vec[i] - avg ) % 2 != 0 ) { cout << -1 << endl; continue; } else result += (vec[i] - avg) / 2; } } cout << result << endl; } return 0; }
break版,函式只有一個出口,通過率為100%:
#include <iostream> #include <vector> using namespace::std; int main() { int n; while (cin >> n) { if (n <= 0) break; int sum = 0; vector<int> vec(n); for (int i = 0; i < n; ++i) { cin >> vec[i]; sum += vec[i]; } if (sum % n != 0) { cout << -1 << endl; continue; } int avg = sum / n; int result = 0; for (int i = 0; i < n; ++i) { if (vec[i] < avg) { if ((avg - vec[i]) % 2 != 0) { result = -1 ; break ; } } else if (vec[i] >= avg) { if ( ( vec[i] - avg ) % 2 != 0 ) { result = -1 ; break ; } else result += (vec[i] - avg) / 2; } } cout << result << endl; } return 0; }