题目: 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[i],array[j-1]); if(count<x) { if(count%2==0) { if(mini1>mini2) { firstscore+=array[j]; j--; count++; goto loop; } else { firstscore+=array[i]; i++; count++; goto loop; } } else { if(mini1>mini2) { secondscore+=array[j]; j--; count++; goto loop; } else { secondscore+=array[i]; 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>>array[i]; defen(num); return 0; }

评论