一叶知秋


私信TA

用户名:lmy19999

访问量:18557

签 名:

等  级
排  名 183
经  验 6758
参赛次数 3
文章发表 31
年  龄 0
在职情况 待业
学  校
专  业

  自我简介:

TA的其他文章

C语言填鸭型
浏览:66

解题思路:

先为两组数排序。a数组从高到低,b数组从低到高。

为每个b数组的数字寻找最理想的a数组中的对应数字。即大于a数组中能大于的最大数字就是胜利win++,并将a数组数字改为-1,避免重复,如果没有能大于的数字那么就寻找一样大的数字就是平局,win不加不减a数组中的数字一样改为-1,如果没有大于的数字也没有一样大的数字那么这个数字就是失败,win--。


注意事项:

参考代码:

#include<stdio.h>

int winflag = 0;

int equalflag = 0;

void up(long *a,int len)

{

int i = 0,j= 0;

long temp = 0;

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

{

for(j = i+1;j < len  ;j++)

if(*(a+i) > *(a+j) )

{

temp = *(a + i);

*(a+i) = *(a+j);

*(a+j) = temp;

}

}

}

void down(long *a,int len)

{

  int i,j;

  long temp = 0;

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

  for(j = i+1;j < len;j++)

  {

  if(*(a+i) < *(a+j))

  {

  temp = *(a + i);

*(a+i) = *(a+j);

*(a+j) = temp;

  }

  }

}

int main(void)

{

  int n,i = 0,j = 0,win = 0;

  long a[100],b[100];

 while(scanf("%d",&n) != EOF){

  win  = 0;

  for(i = 0;i < 100;i++)

  {

  a[i] = 0;

  b[i] = 0;

  }

  for(j = 0;j < n;j++)

  {

  scanf ("%ld",&a[j]);

  }

     for(j = 0;j < n;j++)

    {

  scanf("%ld",&b[j]);

  }

  

  up(b,n);

  down(a,n);

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

 {

 

  for(j = 0;j < n;j++)

  {

   if(b[i] > a[j] && a[j] != -1)//大于最接近的 

   {

    win++;

    a[j] = -1;

    b[i] = -1;

       winflag = 1;

  

   }

  }

    for(j = 0;j < n;j++)

  {

   if(b[i] == a[j] && a[j] != -1)// 或者有等于的 

   {

    a[j] = -1;

    b[i] = -1;

        equalflag = 1;

   }

  }

  if(winflag == 0 && equalflag == 0)//即没有大于也没有等于的 

      win--;

      winflag = 0;

      equalflag = 0;

 }



  printf("%d\n",win*50);

 }

  getchar();

  return 0;

}


 

0.0分

0 人评分

  评论区

  • «
  • »