33,010
社区成员
发帖
与我相关
我的任务
分享
int main()
{
int i, j, k, N=5, mid[2];
//假设2数组都是升序
int a[]={1,3,4,8,10}, b[]={2,5,6,7,9};
i = j = k = 0;
while((i<N)&&(j<N))
{
if (a[i]<b[j])
{
i++;
k++;
if ((k==N)||(k==N+1))
{
mid[k-N] = a[i-1];//因为升序
}
}
else
{
j++;
k++;
if ((k==N)||(k==N+1))
{
mid[k-N] = b[j-1];
}
}
if(k==N+1)
{
printf("The middle numbers are %d and %d\n", mid[0], mid[1]);
return 0;
}
}
while(i<N)
{
i++;
k++;
if ((k==N)||(k==N+1))
{
mid[k-N] = a[i-1];
}
if(k==N+1)
{
printf("The middle numbers are %d and %d\n", mid[0], mid[1]);
return 0;
}
}
while(j<N)
{
j++;
k++;
if ((k==N)||(k==N+1))
{
mid[k-N] = b[j-1];
}
if(k==N+1)
{
printf("The middle numbers are %d and %d\n", mid[0], mid[1]);
return 0;
}
}
return 1;
}
#include <algorithm>
#include <cstdio>
using namespace std;
struct duo {
int x;
int y;
};
duo make_duo(int x, int y) {
duo d;
d.x = x;
d.y = y;
return d;
}
duo find_mid(int a, int b, int c, int d) {
if (a > b) swap(a, b);
if (b > c) swap(b, c);
if (c > d) swap(c, d);
if (a < b) swap(a, b);
if (b < c) swap(b, c);
return make_duo(a, b);
}
duo find_mid(int a[], int a_beg, int a_end,
int b[], int b_beg, int b_end)
{
int len = a_end - a_beg + 1;
if (len == 1) {
return make_duo(a[a_beg], b[b_beg]);
} else if (len == 2) {
return find_mid(a[a_beg], a[a_end], b[b_beg], b[b_end]);
}
int a_mid, b_mid;
if (len & 1) {
a_mid = a_beg + len / 2;
b_mid = b_beg + len / 2;
}
else {
a_mid = a_beg + len / 2 - 1;
b_mid = b_beg + len / 2;
}
if (a[a_mid] < b[b_mid])
return find_mid(a, a_mid, a_end,
b, b_beg, b_mid);
else
return find_mid(a, a_beg, a_mid,
b, b_mid, b_end);
}
int a[100], b[100];
int c[300];
int main() {
int N;
scanf("%d", &N);
for (int i = 0; i < N; ++i) {
scanf("%d", &a[i]);
c[i] = a[i];
}
int j = N;
for (int i = 0; i < N; ++i) {
scanf("%d", &b[i]);
c[j] = b[i];
++j;
}
sort(a, a+N);
sort(b, b+N);
sort(c, c+ 2*N);
printf("%d %d\n", c[N-1], c[N]);
duo d = find_mid(a, 0, N - 1, b, 0, N - 1);
if (d.x > d.y) swap(d.x, d.y);
printf("%d %d\n", d.x, d.y);
return 0;
}
void Main()
{
var list1=new List<int>{3,5,8,9,11,22,33};
var list2=new List<int>{4,6,18,19,21,12,13};
var list=list1.Concat(list2).OrderBy(l=>l);
var dictory=list.Select((value,index)=>new {Key=index+1,Value=value});
int length=list1.Count();
var result=dictory.Where(l=>new int[]{length,length+1}.Contains(l.Key)).Average(l=>l.Value);
Console.WriteLine(result); //11.5
}