1.金银岛
代码展示
#include <stdio.h>
#include <stdlib.h>
struct Kuangshi {
int weight;
int money;
double danjia;
};
int cmp(const void *a, const void *b) {
struct Kuangshi *aa = (struct Kuangshi *)a;
struct Kuangshi *bb = (struct Kuangshi *)b;
return (((aa->danjia) < (bb->danjia)) ? 1 : -1);
}
int main() {
int k, w, s;
int i, j;
double Output[100];
scanf("%d", &k); //组数
for ( i = 0; i < k; i++) {
scanf("%d", &w); //口袋上限
scanf("%d", &s); //矿石种类
Kuangshi kuangshi[s];
for ( j = 0; j < s; j++) { //录入
scanf("%d %d", &kuangshi[j].weight, &kuangshi[j].money);
kuangshi[j].danjia = (double)kuangshi[j].money / (double)kuangshi[j].weight;
}
qsort(kuangshi, s, sizeof(kuangshi[0]), cmp); //从大到小排序
int shengyu = w; //剩余空间
j = 0;
Output[i]=0;
do {
shengyu -= kuangshi[j].weight;
if(shengyu<0){
Output[i]=Output[i]+(shengyu+kuangshi[j].weight)*kuangshi[j].danjia;
}else Output[i] += kuangshi[j].money;
j++;
} while (shengyu > 0&&j<s);
}
for(int i=0;i<k;i++){
printf("%.2lf\n",Output[i]);
}
return 0;
}
2.田忌赛马
代码展示
#include<stdio.h>
#include<stdlib.h>
long a[10000],b[10000];
int cmp( const void *a, const void *b )
{
return ( *( long *)a) - ( *( long *)b);
}
int main()
{
long n;
while(1)
{
long sum=0,i,j,end1,end2;
scanf("%ld",&n);
if(n==0) break;
for(i=0;i<n;i++)
scanf("%ld",&a[i]);
for(i=0;i<n;i++)
scanf("%ld",&b[i]);
qsort( a, n, sizeof( long ), cmp );
qsort(b, n, sizeof( long ), cmp );
j=0;
for(i=j=n-1,end1=end2=0;j>=end2&&i>=end1;j--)
{
if(a[i]>b[j])
{
sum++;
i--;
}
else if(a[i]<b[j]){
sum--;
end1++;
}
else
{
if(a[end1]>b[end2])//a最弱的马强于b最弱的马
{
sum++;
end1++;
end2++;
j++;
}
else if(a[end1]<b[end2])
{
sum--;
end1++;
}
else
{
if(a[end1]==b[j])
end1++;
else
{
sum--;
end1++;
}
}
}
}
printf("%d\n",sum*200);
}
return 0;
}