2015-04-22 23 views
0

这是我第一次使用在线评判,我尝试了一个简单的程序来熟悉环境。通过uva的中位数程序

这里是question

我解决了它,但得到了一个错误的答案!

#include<stdio.h> 
#include<math.h> 
#include<iostream> 

int main() 
{ 
int t; 
int n; 
int num[10]; 
int i,j,temp; 
int s; 
int fmid; 
std::cin >>t; 
int iter=0; 
while (iter<t) 
{ 
std::cin>>n; 
if (n!=-1){ 
for(i=0;i<n;i++) 
std::cin>>num[i]; 

for(i=0;i<n-1;i++) 

for(j=i+1;j<n;j++) 
if(num[i]>num[j]) 
{temp=num[i]; 
num[i]=num[j]; 
num[j]=temp; 
} 

s=0; 
if (n%2 ==0) 
{ 
int mid=n/2-1; 
int midd=mid+1; 

s=(num[mid]+num[midd])/2; 
fmid=s; 
} 

else 
{s=ceil(n/2); 
fmid=num[s];} 

std::cout<<fmid; 
} 
iter++; 

} 

return 0; 

} 

任何建议,非常感谢。

感谢

回答

1

我会阅读所有的数字,它们存储在一个数组,然后在<algorithm>

使用std::sort数组进行排序,请在下面找到我的代码:

#include <stdio.h> 
#include <math.h> 
#include <iostream> 
#include <algorithm> 

int arr[10]; 

int main() 
{ 
    int N; 
    while ((std::cin >> N) && (N!=-1)){ 
     for(int i=0;i<N;i++) { 
      std::cin >> arr[i]; 
     } 
     std::sort(arr,arr+N); 
     if(N%2 == 1){ 
      std::cout << arr[N/2] << std::endl; 
     } 
     else { 
      double ans = ((double)arr[N/2] + (double)arr[(N/2)-1])/2.0; 
      std::cout << ans << std::endl; 
     } 
    } 

    return 0; 
} 

我希望它为你工作。

我可以知道问题编号吗?我会尽力在那里提交给你一个AC解决方案。

+0

谢谢史蒂芬!一个整洁的解决方案。虽然这个问题并不难,但我无法得到正确的答案:(..!。你有什么意见可以提高我在网上裁判的表现吗?..my-no:616507 –

+0

我建议你以保持练习中的问题 系统地从简介和标准数据结构和库,图表等方面尝试“竞争性编程3书籍”的每个章节,您是否使用uhunt?它有很大的帮助 'http:// uhunt .felix-halim.net /' – yulonglong

+0

你的意思是你的号码是616507?当你提交你的代码时,我指的是页面上的问题号码? – yulonglong