0
点赞
收藏
分享

微信扫一扫

算法题总结2

想溜了的蜗牛 2022-03-13 阅读 56

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;
}

 

举报

相关推荐

0 条评论