一个简单的祖玛消除算法

----大漠---- 2017-06-16 12:02:56


4种颜色 用1234表示 3个相同颜色即可消除 举例:111
两端合并为3个或3个以上颜色相邻为连消加分。 举例:211333122 一消为一个一百分,二消一个两百分,三以上及三为三百分。此题目300+600+900=1800分。
题目:1234随机一排数字,数量25。如何消除一些数字,达到最高分。
22144321421322331421342142怎么计算,有什么思路?源码最好。。想做一回伸手党。。
...全文
1233 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
woer114477 2017-06-19
  • 打赏
  • 举报
回复
很好,我忘了 三个以上的例子了, 不想改了, 把截取字符串 的数字 不写死, 用一个方法遍历 判断下 有几个相同的,把相同的个数 返回 用来截取字符串,再进行下一步就好了
woer114477 2017-06-19
  • 打赏
  • 举报
回复

package cn.itcast.test;

import org.junit.Test;

public class Test1 {
	@Test
	public void sum(){
		int count = 0;	//记录最大连消次数,初始为0
		int score = 0;	//最终得分,初始为0
		int sequence = 0;	//记录最大连消次数初始连消的索引
		String number="2214432142132233142134214";	//初始的数字串
		for (int i = 0; i < number.length()-1; i++) {		//遍历数字串,判断到倒数第二个数
			// 第一次遍历时,i索引与i+1索引的数相同,则可以添加一个相同的数,进行消除,后续消除由字符串内数字自动消除
			int countOne = 0;	//记录单轮循环连消次数
			if (number.charAt(i) == number.charAt(i+1)) {	//第一次消除
				countOne++;
				if (i==0) {
					String s = number.substring(i+2);
					countOne = getCount(s,countOne);
				}else if(i>0 && i<(number.length()-2)){
					String s1 = number.substring(0, i); 	//i索引前面的字符串
					String s2 = number.substring(i+2);
					String s = s1+s2;
					countOne = getCount(s,countOne);
				}else {	//i==sb.length()-2  时
					String s1 = number.substring(0, i); 	//i索引前面的字符串
					String s2 = number.substring(i+2);
					String s = s1+s2;
					countOne = getCount(s,countOne);
				}
			}
			//单轮循环结束,判断此轮连消次数
			if (countOne>count) {
				count = countOne;
				sequence = i+1;
			}
		}
		//整个字符串循环结束
		if (count==1) {
			score = 100;
		}else if (count==2) {
			score = 100+200;
		}else if (count>=3) {
			score = 100+200+(count-2)*300;
		}
		System.out.println("连消次数: "+count);
		System.out.println("数字位数: "+sequence);
		System.out.println("最大得分: "+score);
	}
	public int getCount(String number, int count){
		for (int i = 0; i < number.length()-2; i++) {		//遍历数字串,判断到倒数第三个数
			// 第一次遍历时,i与i+1和i+2索引的数相同,则可以添加一个相同的数,进行消除,后续消除由字符串内数字自动消除
			if (number.charAt(i) == number.charAt(i+1) && number.charAt(i+1)==number.charAt(i+2)) {	//第一次消除
				count++;
				if (i==0) {
					String s = number.substring(i+2);
					count = getCount(s,count);
				}else if(i>0 && i<(number.length()-2)){
					String s1 = number.substring(0, i); 	//i索引前面的字符串
					String s2 = number.substring(i+2);
					String s = s1+s2;
					count = getCount(s,count);
				}else {	//i==sb.length()-2  时
					String s1 = number.substring(0, i); 	//i索引前面的字符串
					String s2 = number.substring(i+2);
					String s = s1+s2;
					count = getCount(s,count);
				}
			}
		}
		return count;
	}
}
我写得很是复杂 你看看行么

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧