13 条回复
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5+7; int n; struct D{ int grade[5] = {0,0,0,0,0}; int Min = 6; int index; int ave; }p[maxn]; bool cmp(const D & a, const D & b){ if(a.Min == b.Min){ if(a.ave == b.ave){ return a.index <= b.index; } return a.ave >= b.ave; } return a.Min >= b.Min; } int main() { cin>>n; for(int i=0;i<n;i++){ p[i].index = i; for(int j=0;j<5;j++){ cin>>p[i].grade[j]; p[i].ave += p[i].grade[j]; p[i].Min = min(p[i].grade[j], p[i].Min); } } sort(p,p+n,cmp); for(int i=0;i<n-1;i++){ cout<<p[i].index<<" "; } cout<<p[n-1].index<<endl; return 0; }
讲道理我感觉没错啊 就是20%
function a(line) { var store = []; for(var i = 0 ;i<line.length;i++){ var arr = line[i].split(' '); var temp = {}, sum = 0; temp.index = i; temp.score = Math.min.apply(null,arr); for(var j = 0;j<arr.length; j++) { sum += parseInt(arr[j]); } temp.avarage = sum/(arr.length); if(store.length ===0 ){ store.push(temp); } else { for(var k = 0; k < store.length; k++) { if(temp.score > store[k].score){ store.splice(k,0,temp); break; } else if(temp.score === store[k].score){ if(store[k].avarage < temp.avarage){ store.splice(k,0,temp); break; } else{ if(k === store.length-1){ store.push(temp); break; } } } else{ if(k === store.length-1){ store.push(temp); break; } } } } } var result = store.map(function(val,index){ return val.index; }); console.log(result.join(' ')); } var b = a(['0 4 5 3 4','3 3 3 3 3','5 4 4 3 5','5 5 5 5 5','5 2 4 3 4']);
这个是本地的,考试就参照把line改成while(line= read_line()) 对i进行一下改变,然后在第一行先把n=read_line();取出来,然后console换成print,我也感觉代码没啥毛病,也只过了20%,可能是中了20%的毒
#include <iostream> using namespace std; struct JiuDian{ int J; int Low; int Sum; }Arr[10001], p[10001]; int sumGoal(int a[]){ int res = 0; for (int i = 0; i < 5; i++){ res += a[i]; } return res; } int lowGoal(int a[]){ int Min = a[0]; for (int i = 1; i < 5; i++){ if (a[i] < Min){ Min = a[i]; } } return Min; } bool Better(JiuDian a, JiuDian b){ if (a.Low > b.Low){ return true; } else if (a.Low == b.Low){ if (a.Sum > b.Sum){ return true; } else if (a.Sum == b.Sum){ if (a.J < b.J){ return true; } } } return false; } void BubbleSort(int n) { int i, j; for (i = 0; i < n; i++){ for (j = 1; j < n - i; j++){ if (!Better(Arr[j-1], Arr[j])){ swap(Arr[j-1], Arr[j]); } } } } void mergearray(JiuDian a[], int first, int mid, int last, JiuDian temp[]) { int i = first; int j = mid + 1; int m = mid; int n = last; int k = 0; while (i <= m && j <= n) { if (!Better(a[i], a[j])) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while (i <= m) temp[k++] = a[i++]; while (j <= n) temp[k++] = a[j++]; for (i = 0; i < k; i++) a[first + i] = temp[i]; } void mergesort(JiuDian a[], int first, int last, JiuDian temp[]) { if (first < last) { int mid = (first + last) / 2; mergesort(a, first, mid, temp); mergesort(a, mid + 1, last, temp); mergearray(a, first, mid, last, temp); } } int main(){ int n; cin >> n; for (int i = 0; i < n; i++){ Arr[i].J = i; int goal[5] = {0}; for (int j = 0; j < 5; j++){ cin >> goal[j]; } Arr[i].Low = lowGoal(goal); Arr[i].Sum = sumGoal(goal); } if (n == 1){ cout << 0 << endl; } else{ // 冒泡 BubbleSort(n); // 归并 //mergesort(Arr, 0, n-1, p); for (int i = 0; i < n; i++){ cout << Arr[i].J << " "; } cout << endl; } return 0; }
这是我写的,冒泡和归并都有,排序题做了很多都快背下来了hhh,也是20%,不知道到底错在哪里
添加回复