【題目描述】
在主城站街很久之後,小萌決定不能就這樣的浪費時間虛度青春,他打算去打副本。
這次的副本只有乙個boss,而且boss是不需要擊殺的,只需要和它比智力…….
boss會列出一正整數的序列,由小萌先開始,然後兩個人輪流從序列的任意一端取數,取得的數累加到積分裡,當所有數都取完,遊戲結束。
假設小萌和boss都很聰明,兩個人取數的方法都是最優策略,問最後兩人得分各是多少。
輸入 第一行:乙個正整數n(2 ≤ n ≤ 100),表示序列中正整數的個數。
第二行至末尾:用空格隔開的n個正整數(1 ≤ a[i] ≤ 200)
輸出 只有一行,用空格隔開的兩個數,小萌的得分和boss的得分。
樣例輸入
6 4 7 2 9 5 2
樣例輸出
18 11
上面的題目,在乙個討論組看到後自己寫乙個自己想的解法。
package com.demo;
public
class
main ;//輸入資料
int pa=0,pboss=0;//pa表示挑戰者,pboss表示boss
int indexarray = toindexarray(a);
boolean tt =false;
int flag = (indexarray.length&0x001 )== 1?(indexarray.length>>1)+1:(indexarray.length>>1);
for(int i=0;iif(iif(indexarray[i]==-1)elseelse
}}elseelse
else }}
}system.out.println("pa"+pa);
system.out.println("pboss"+pboss);
}/**
*設定乙個陣列,返回每兩個數中最大的數座標,第乙個數大那就是返回0否者返回1,如果陣列長度是奇數,到了中間數不比較,直接設定為-1,並且把步長i-1.繼續每兩個數比較。下面演算法用了一些小的技巧
*/public
static
int toindexarray(int a)
else
if(b)
if(a[i]>=a[i+1])
else
}else
if(a[i]>=a[i+1])
else}}
}else
else}}
return c;
}}
演算法設計與分析 上機題Mergesort
include using namespace std define n 100 int g array n 存放輸入的數字 static int count 存放元素的個數 初始化函式 void initial 合併函式 void merge int a,int l,int m,int r els...
演算法設計與分析 上機題Mergesort
include using namespace std define n 100 int g array n 存放輸入的數字 static int count 存放元素的個數 初始化函式 void initial 合併函式 void merge int a,int l,int m,int r els...
演算法 常見演算法題
演算法題 假如有100個不相同的數,比如從1到100,怎樣使用10次取出其中的10個不同的數字,要求每個數取出的概率一樣 一開始沒有說10次,所以我說,使用乙個random函式,以時間為種子來取,當取出乙個時,做標記,下次再取到這個數時,重新取一次 然後他就說了如果只能夠取10次怎麼辦?一開始我想到...