解题思路:
先为两组数排序。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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复