解题思路:
先为两组数排序。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语言代码)格式错误!!!浏览:1177 |
A+B for Input-Output Practice (III) (C语言代码)浏览:592 |
简单的a+b (C语言代码)浏览:661 |
Minesweeper (C语言描述,蓝桥杯)浏览:1176 |
愚蠢的摄影师 (C++代码)浏览:980 |
Tom数 (C语言代码)浏览:758 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:721 |
IP判断 (C语言代码)浏览:592 |
敲七 (C++代码)浏览:1119 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:606 |