手记

HDU-1052 划水记录1


题目:

题目描述:

田忌赛马的故事众所都知,田忌与国王赛马,赢一场赚200,输一场亏200,平局没有影响。问田忌最大能赚多少。

输入:

输入数据多达50个测试案例。每一个数据都是由一个正整数n(1000个)开始,这是马的数目。第二行每一个整数是田忌的马的速度。第三行的每一个整数是国王的马的速度。n为0则输入结束。

输出:

对于每一个输入的情况,输出一行包含一个单一的数字,这是田忌将获得的最大的钱数。

思路:

能用最差的马弄对面最差的马就用最差的马 否则用最差的马换对方最好的马。

代码

#include <stdio.h>

//用了排序方便处理

void sort(int *a, int left, int right)

{

    if (left >= right) 

    {

        return;

    }

    int i = left;

    int j = right;

    int key = a[left];

    while (i < j)                              

    {

        while (i < j && key <= a[j])

        {

            j--;

        }

        a[i] = a[j];

        while (i < j && key >= a[i])

        {

            i++;

        }

        a[j] = a[i];

    }

    a[i] = key; 

    sort(a, left, i - 1); 

    sort(a, i + 1, right); 

}

int main()

{

    int SL = 0;

    int XHBL = 0;

    int DYFS = 0;

    int *DYZZ = 0;

    int *DEZZ = 0;

    int *DEJWZZ = 0;

    int DIYIZU[10] = { 0 };

    int DIERZU[10] = { 10 };

    scanf("%d",&SL);

    for (XHBL = 0; XHBL < SL; XHBL++)

        scanf("%d", &DIYIZU[XHBL]);

    for (XHBL = 0; XHBL < SL; XHBL++)

        scanf("%d", &DIERZU[XHBL]);

    sort(DIYIZU,0, SL-1);

    sort(DIERZU,0, SL-1);

    DYZZ = &DIYIZU[0];

    DEZZ = &DIERZU[0];

    DEJWZZ = &DIERZU[SL - 1];

    for (XHBL=0;XHBL<SL;XHBL++)

    {

        if (*DYZZ >= *DEZZ) //这里是如果两马速度相等就打平还是齐王赢? 这里算作平等

        {

            if(*DYZZ!= *DEZZ)

                DYFS += 200;

            DYZZ++;

            DEZZ++;

        }

        else

        {

            DEJWZZ--;

            DYZZ++;

            DYFS -= 200;

        }

    }

    printf("Tianji InTotal:%d", DYFS);

    return 0;

}

©著作权归作者所有:来自51CTO博客作者hzChan的原创作品,如需转载,请注明出处,否则将追究法律责任


0人推荐
随时随地看视频
慕课网APP