网易0912 暗黑字符串

网易0912 暗黑字符串

  题目的大意:

  一个字符串只能由‘A’、‘B’、‘C’三个字母组合而成;若在字符串中如果‘A’‘B’‘C’三个字符任意组合出现,则此字符串为清澈的,否则为黑暗的。如“AABBCCABAA”因为包含“CAB”,所以是清澈的;“AABBCCBCBBA”则是黑暗的。

  输入:字符串的长度n(1 <= n <= 30)

  输出:包含的黑暗字符串的个数


  样例:

  输入:2

             3

  输出:9

            21

  解题思路:

  字符串不为黑暗,n >= 3;

  当 n = 1时,有3种情况,均为黑暗;

  当 n = 2时,有9种情况,均为黑暗;

  当 n = 3时,第一个位置有3种选择,第二个位置也有3种选择;第三个位置看前两个位置的选择情况:如果前两个字符相同则第三个位置有三种选择;否则有两种选择。故共有3 * (3 + 2 * 2) = 21种是黑暗的。

  当n = 4时,按照n = 3的情况进行类推,如果第2个位置和第三个位置字符相同时,第四个位置有3种选择,否则有两种选择。故共有 3 * (3 * (1 + 2) + 2 * (1 * 2 + 2))) = 51种是黑暗的

  ......

  规律:

  从 n = 3开始共有 3 * (3 * num3 + 2 * num2)种

  并且 num3' = num3 + num2     num2' = 2 * num3 + num2



  源码如下:

package wangyi;

import java.util.Scanner;

public class Main2 {
	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner scan = new Scanner(System.in);
		long arr[] = new long [30];
		arr[0] = 3;
		arr[1] = 9;
		long num3 = 1;
		long num2 =2;
		for(int i = 2;i < 30;i++){
			arr[i] = 3 * (3 * num3 + 2 * num2);
			long temp = num3;
			num3 = num2 + num3;
			num2 = 2 * temp + num2;
		}
		int n;
		while(scan.hasNextInt()){
			n = scan.nextInt();
			System.out.println(arr[n - 1]);
		}
	}
}


 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值