首页 > 编程资源分享区 > C/C++测试题 > 厦门大学2005c++年程序设计题第一题
2005
12-29

厦门大学2005c++年程序设计题第一题

题目:
1.    取胜之道
Program国度的人,喜欢玩这样一个游戏,在一块板上写着一行数,共n个。两个游戏者,轮流从最右或最左取一个数。刚开始,每个游戏者的得分均为零。如果一个游戏者取下一个数,则将该数的值加到该游戏者的得分上,最后谁的得分最高谁就赢了游戏。给出这n个数( 从左往右), 假设游戏者都是非常聪明的,问最后两个人的得分(假设第一个人首先取数).
输入格式:第一行为n(2<=n<=100),第二行为n个数,每个数字之间均用空格隔开。输出为两个游戏者的得分.第一个数表示第一个游戏者的得分,第二个数为第二个游戏者的得分,两个数字之间用空格隔开。
如输入
6
4 7 2 9 5 2
输出
18 11
程序:
//主要算法思想是考虑题目中的"游戏者都是非常聪明"这句话
#include<iostream>
using namespace std;
const int N=20;
int array[N];
int mininum(int x,int y)
{
    return x>y?x:y;
}
void defen(int x)
{
    int count=0,firstscore=0,secondscore=0,i=0,j=x-1,mini1=0,mini2=0 ;
loop:
    mini1=mininum(array[i+1],array[j]);
    mini2=mininum(array,array[j-1]);
    if(count<x)
    {
        if(count%2== 0)
        {
             if(mini1>mini2)
             {
                 firstscore+=array [j];
                 j–;
                 count++;
                 goto loop;
             }
             else
             {
                 firstscore+=array ;
                 i++;
                 count++;
                 goto loop;
             }
        }
        else
        {
                 if(mini1>mini2)
             {
                 secondscore+=array [j];
                 j–;
                 count++;
                 goto loop;
             }
             else
             {
             secondscore+=array;
                 i++;
                 count++;
                 goto loop;
             }
        }
    }
    else
    {
        cout<< endl<<firstscore<<” “<<secondscore<<endl;
        return ;
    }
}

int main()
{
    int num=0;
    cin>>num;
    for(int i=0;i<num;i++)
        cin>>a rray;
    defen(num);
    return 0;
}


留下一个回复