Vote Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3391 Accepted Submission(s): 1829 Problem Description 美国大选是按各州的投票结果来确定最终的结果的,如果得到超过一半的州的支持就可以当选,而每个州的投票结果又是由该州选民投票产生的,如果某个州超过一半的选民支持希拉里,则她将赢得该州的支持。现在给出每个州的选民人数,请问希拉里至少需要赢得多少选民的支持才能当选? Input 多组输入数据 每组数据的第一行包括一个整数N(1<=N<=101),表示美国的州数,N=0表示输入结束 接下来一行包括N个正整数,分别表示每个州的选民数,每个州的选民数不超过100 Output 对于每组数据输出一行,表示希拉里至少需要赢得支持的选民数 Sample Input 3 5 7 5 0 Sample Output 6
#include<stdio.h> #include<iostream> using namespace std; /*int paixu(int *a,int n) { int i,j,temp; for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } qqqqqqq } */ int main() { int n,i,j,m,flag,temp; int a[105]; while(cin>>n&&n) { int sum=0; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } /* if(n%2==0) { sum=0; //if(a[i]%2==0) for(i=0;i<n/2;i++) { if(a[i]%2==0) sum+=a[i]/2; else sum+=a[i]/2+1; //sum+=a[i]/2; } } if(n%2!=0) { sum=0; for(i=0;i<n/2+1;i++) { if(a[i]%2==0) sum+=a[i]/2; else sum+=a[i]/2+1; //sum+=a[i]/2; } } */ for(i = 0; i<n/2+1; i++)//算出最小的前几个的票民数即所求 sum = a[i]/2+1 + sum; cout<<sum<<endl; } return 0; }
卧槽 这个题就是个坑,坑就在“超过一半儿”上面 才导致了我一系列的分奇数偶数求一半儿,冒泡排序的简单使用