google jam 大赛 PlayCards 源码/另放分:)
import java.util.ArrayList;
/**
* @author zez
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class PlayCards {
private int maxCardsNum = 0;
private int tempMaxCardsNum = 0;
private ArrayList runNumListList = new ArrayList(); //所有行数组
private ArrayList setNumListList = new ArrayList(); //所有列数组
private ArrayList allCrossNumList = new ArrayList();// all num list
private ArrayList crossNumList = new ArrayList(); //cross num
private class CrossNum{
public int crossnum = 0; //共享数
public ArrayList setNums = null; //行
public ArrayList runNums = null; //列
public CrossNum(int num){
crossnum = num;
}
}
/*转换为数字 1--40 */
private void covertCards(String[] cards){
int length = cards.length;
String num;
char suit;
int tempNum;
CrossNum tempCrossNum;
for(int i=0 ;i < length; i++){
num = cards[i].substring(0,cards[i].indexOf(" "));
suit = cards[i].charAt(2);
tempNum = Integer.parseInt(num);
/*'S', 'H', 'D', or 'C'.*/
switch (suit){
case 'H':
tempNum = tempNum+10;
break;
case 'D':
tempNum = tempNum+20;
break;
case 'C':
tempNum = tempNum+30;
break;
default:
break;
}
/// System.out.print(tempNum);
tempCrossNum = new CrossNum(tempNum);
allCrossNumList.add(tempCrossNum);
}
/*for(int i=0 ;i < length; i++){
System.out.println(((CrossNum)crossNumList.get(i)).crossnum);
}*/
}
/*获取所有 Set 和 Run*/
private void countSetAndRun(){
int length = allCrossNumList.size();
int j;
ArrayList tempRun;
for(int i=0; i< length-2;){
/*三个连续数*/
if(((CrossNum)allCrossNumList.get(i)).crossnum +1 == ((CrossNum)allCrossNumList.get(i+1)).crossnum && ((CrossNum)allCrossNumList.get(i+1)).crossnum+1 == ((CrossNum)allCrossNumList.get(i+2)).crossnum){
tempRun = new ArrayList();
runNumListList.add(tempRun);
tempRun.add((CrossNum)allCrossNumList.get(i));
tempRun.add((CrossNum)allCrossNumList.get(i+1));
tempRun.add((CrossNum)allCrossNumList.get(i+2));
((CrossNum)allCrossNumList.get(i)).runNums = tempRun;
((CrossNum)allCrossNumList.get(i+1)).runNums = tempRun;
((CrossNum)allCrossNumList.get(i+2)).runNums = tempRun;
/*add to crossnum list*/
j=i+2;
while(j<length-1 && ((CrossNum)allCrossNumList.get(j+1)).crossnum == ((CrossNum)allCrossNumList.get(j)).crossnum+1){
tempRun.add((CrossNum)allCrossNumList.get(j+1));
((CrossNum)allCrossNumList.get(j+1)).runNums = tempRun;
j++;
}
i=j;
}
else{
i++;
}
}
ArrayList[] tempSetArray = new ArrayList[10];
for(int i = 0; i<10; i++){
tempSetArray[i]=new ArrayList();
}
for(int i = 0; i<length; i++){
//System.out.println("((CrossNum)allCrossNumList.get(i)).crossnum "+((CrossNum)allCrossNumList.get(i)).crossnum);
tempSetArray[(((CrossNum)allCrossNumList.get(i)).crossnum-1) %10].add((CrossNum)allCrossNumList.get(i));
}
for(int i = 0; i<10; i++){
if(tempSetArray[i].size()>=3){
setNumListList.add(tempSetArray[i]);
for(int k=0;k<tempSetArray[i].size();k++){
((CrossNum)(tempSetArray[i].get(k))).setNums = tempSetArray[i];
}
}
}
}
/*判断数组中是否有这个数num
private boolean isInArray(ArrayList arry,int num){
int length = arry.size();
for(int i=0 ;i<length; i++){
if(((Integer)arry.get(i)).intValue() == num){
return true;
}
}
return false;
}
*/
private void getCrossNums(){
int length = allCrossNumList.size();
for(int i=0;i<length;i++){
if(null != ((CrossNum)(allCrossNumList.get(i))).setNums && null != ((CrossNum)(allCrossNumList.get(i))).runNums){
crossNumList.add(allCrossNumList.get(i));
}
}
}
private void countMaxCards(){
for(int i=0;i<runNumListList.size()&& ((ArrayList)runNumListList.get(i)).size()>=3;i++){
tempMaxCardsNum+= ((ArrayList)runNumListList.get(i)).size();
}
for(int j=0;j<setNumListList.size()&& ((ArrayList)setNumListList.get(j)).size()>=3;j++){
tempMaxCardsNum+= ((ArrayList)setNumListList.get(j)).size();
}
if(tempMaxCardsNum> maxCardsNum)
{
maxCardsNum = tempMaxCardsNum;
}
tempMaxCardsNum=0;
}
private void countMaxCards(int i){
CrossNum tempCrossNum;
tempCrossNum = (CrossNum)crossNumList.get(i);
if(i==0){
(tempCrossNum).setNums.remove(tempCrossNum);
countMaxCards();
(tempCrossNum).runNums.remove(tempCrossNum);
tempCrossNum.setNums.add(tempCrossNum);
countMaxCards();
return;
}else{
(tempCrossNum).setNums.remove(tempCrossNum);
countMaxCards(i-1);
(tempCrossNum).runNums.remove(tempCrossNum);
tempCrossNum.setNums.add(tempCrossNum);
countMaxCards(i-1);
}
}
/*cards {"1 S", "2 S", "3 S"}*/
public int maxCards(String[] cards){
if(cards.length < 3)
{
return 0;
}
covertCards(cards);
countSetAndRun();
getCrossNums();
maxCardsNum = 0;
if(crossNumList.size()>0){
countMaxCards(crossNumList.size()-1);
}
else
{
countMaxCards();
}
return maxCardsNum;
}
public static void main(String[] args) {
PlayCards pc = new PlayCards();
String[] cards ={"1 S", "2 S", "10 S", "5 S", "8 S",
"3 H", "9 H", "6 H", "5 H", "4 H",
"10 D", "5 D", "7 D", "4 D", "1 D",
"2 C", "4 C", "5 C", "6 C", "7 C"};
//String[] cards={"1 S", "2 S"};
pc.maxCards(cards);
System.out.println("maxCardsNum "+ pc.maxCardsNum);
}
}
相关推荐
产教融合实训基地与实践中心建设逻辑图-可编辑版
产教融合实训基地与实践中心建设逻辑图-可编辑版
idea2025-free.zip
idea2025-free.zip
sop基于灵敏度分析的有源配电网智能软开关优化配置升级1(Matlab代码实现)
内容概要:本文提出了一种基于灵敏度分析的有源配电网智能软开关(SOP)优化配置方法,旨在应对高比例分布式电源接入带来的电压波动与网络损耗加剧等问题。研究以IEEE33节点系统为算例,通过改进的灵敏度分析模型量化各节点对电压和功率流动的影响程度,进而构建SOP选址与定容的优化模型,实现降低网损、改善电压分布及提升系统运行灵活性的目标。全文详细阐述了灵敏度指标的数学推导、目标函数与约束条件的建模过程,并基于Matlab实现了完整的仿真求解流程,具备良好的工程实用性与学术参考价值。; 适合人群:电力系统及其自动化、电气工程等相关专业的硕士博士研究生、科研机构研究人员,以及从事智能配电网规划、运行与优化的工程技术人员。; 使用场景及目标:①研究分布式电源大规模接入背景下配电网的主动调控与优化策略;②指导智能软开关在实际配电网中的科学选址与容量配置;③为相关科研课题提供可复现的仿真案例,支撑学术论文撰写与算法验证。; 阅读建议:建议读者结合提供的Matlab代码与IEEE33节点标准模型进行动手实践,重点理解灵敏度指标的物理意义及其在优化模型中的应用逻辑,关注求解过程中的约束设置与算法收敛性,并可进一步拓展至SOP与储能联合配置、多时间尺度优化等复杂场景进行二次开发与研究。
Ubuntu安装Latex
关于Ubuntu安装Latex的详细记录和排错指南
高校技术转移办公室人员在成果转化过程中,如何实现科技成果与产业需求的高效对接?.docx
高校技术转移办公室人员在成果转化过程中,如何实现科技成果与产业需求的高效对接?


非技术区
