1. 程式人生 > >HDU-1052 划水記錄1

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