解题思路:
先为两组数排序。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语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:518 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:587 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:763 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:901 |
1642题解浏览:711 |
C二级辅导-公约公倍 (C语言代码)浏览:482 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:324 |
震宇大神的杀毒软件 (C语言代码)浏览:1079 |
C二级辅导-等差数列 (C语言代码)浏览:770 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1189 |