zoukankan      html  css  js  c++  java
  • 小球(总结sort和cmp函数、结构体排序)

     

                                                     问题 N: 小球(点击)

                                                                  时间限制: 1 Sec  内存限制: 128 MB
                                                                              提交: 462  解决: 172
                                                                  [提交] [状态] [讨论版] [命题人:admin]

    题目描述

    有R个红色盒子和B个蓝色盒子,还有R个红色小球和B个蓝色小球。每个盒子只能装一个小球,每个小球都要放在一个盒子里。如果把一个红色小球放在一个红色盒子里,那么得分是C。如果把一个蓝色小球放在一个蓝色盒子里,那么得分是D。如果把一个红色小球放在一个蓝色盒子里,那么得分是E。如果把一个蓝色小球放在一个红色盒子里,那么得分也是E。现在给出R,B,C,D,E。应该如何放置这些小球进盒子,才能使得总得分最大?输出最大的总得分。

    输入

    一行,5个整数,分别是R,B,C,D,E。(1 ≤ R ≤ 100,1 ≤ B ≤ 100,  -1000 ≤ C,D,E ≤ 1000)

    输出

    一个整数,最大总得分。

    样例输入

    复制样例数据

    2  3  100  400  200
    

    样例输出

    1400
    

    提示

    #include<stdio.h>
    int main()
    {
        long long int sum[100006],n,m,c,d,e,k,i,j,temp;
        scanf("%lld%lld%lld%lld%lld",&n,&m,&c,&d,&e);
        k=0;
        if(n>=m){                        //先判断n和m的个数关系 因为如果不相同肯定不是交换m+n次
            for(i=0;i<=m;i++){
                sum[k++]=2*i*e+(n-i)*c+(m-i)*d;  //i表示从n和m中各自拿出的个数 由此可以计算总分数
            }                                                                    
        }
        else{
            for(i=0;i<=n;i++){
                sum[k++]=2*i*e+(n-i)*c+(m-i)*d;
            }
        }
        for(i=0;i<k-1;i++){
            for(j=0;j<k-i-1;j++){               //由于没改头文件 所以就先没用sort排序
                if(sum[j]<sum[j+1]){         
                    temp=sum[j];
                    sum[j]=sum[j+1];
                    sum[j+1]=temp;
                }
            }
        }
        printf("%lld
    ",sum[0]);            //输出最大的积分
        return 0;
    }
    

    虽然题目简单 但由于没搞清楚字母i的含义导致多次错误。

        scanf("%lld%lld%lld%lld%lld",&n,&m,&c,&d,&e);
        k=0;
        if(n>=m){
            for(i=0;i<=m;i+=2){
                sum[k++]=i*e+(n-(i/2))*c+(m-(i/2))*d;  //其实i并不是只可以取0 2 4 等偶数 因为由于i 
                                                        表示的含义是从m和n中各取小球的数目 所以i可                                                     
                                                        以取任意小于n或m的值。(错误点)
            }
        }
        else{
            for(i=0;i<=n;i+=2){
                sum[k++]=i*e+(n-(i/2))*c+(m-(i/2))*d;
            }
        }
     

    总结 sort 和 cmp函数

    1.对整形数值的使用:

    int   cmp(int x,int y)

    {

                            return x>y;    // 从大到小     return x<y;  // 从 小到大

    }

    这里面和在冒泡排序中对x和y的判断相反    因为这是返回时候的大小关系

    而冒泡是对返回之前的大小关系的判断 然后做出排序

    * 同样适用于 lang lang int 但注意一定要将cmp函数中所有的int换掉 不然提交后会报错(报错今天遇到最多的就是忘记加& 确实     不应该)。

    2.对浮点型的数值的使用:

    double cmp(double x,double y)

    {

                            return x>y;    // 从大到小     return x<y;  // 从 小到大

    }

    3.达到像冒泡中对二维数组a[i][0]的排序 :(使用结构体)

    普通冒泡排序:

         for(i=0;i<k-1;i++){
            for(j=0;j<k-i-1;j++){
                if(sum[j][0]<sum[j+1][0]){
                    temp=sum[j][0];
                    sum[j][0]=sum[j+1][0];
                    sum[j+1][0]=temp;
    
                    temp=sum[j][1];
                    sum[j][1]=sum[j+1][1];
                    sum[j+1][1]=temp;
                }
            }
        }

    使用结构体排序: (c++头文件)

    struct node{
        int x,y;        //定义结构体
    }a[10006];
    
    int cmp(node a,node b)
    {
        return a.x<b.x;  //按照x  即a[0][0]和a[1][0]的大小关系排序  若为y则按照a[0][1]和a[1][1]
    }
    
    
    for(i=0;i<n;i++){
        scanf("%d%d",&a[i].x,&a[i].y);   //结构体的输入
    }
    
    
    
    
    //使用sort
    
    sort(a,a+n,cmp);       //从0开始的n个值的排序
    
    sort(a,a+n+1,cmp);  //从1开始的n个值的排序
  • 相关阅读:
    周末之个人杂想(十三)
    PowerTip of the DaySorting Multiple Properties
    PowerTip of the DayCreate Remoting Solutions
    PowerTip of the DayAdd Help to Your Functions
    PowerTip of the DayAcessing Function Parameters by Type
    PowerTip of the DayReplace Text in Files
    PowerTip of the DayAdding Extra Information
    PowerTip of the DayPrinting Results
    Win7下IIS 7.5配置SSAS(2008)远程访问
    PowerTip of the DayOpening Current Folder in Explorer
  • 原文地址:https://www.cnblogs.com/ldu-xingjiahui/p/12407484.html
Copyright © 2011-2022 走看看