【Pta】天梯赛——神奇字符串

神奇字符串

题目描述

神奇字符串的定义为: 只含有1和2, 且将其按照连续的1和2拆开后,对应的每部分数字数量恰好和原字符串相同
例如: 1 22 11 2 1 22 1 22 11 2 11 22 ...... 每部分对应的1和2个数为
1 2 2 1 1 2 1 2 2 1 2 2 ...... 恰好等于原串
现给定N,求神奇串的前N位中有多少个1 .

输入格式:

第一行输入一个T,代表数据组数
接下来的T行,输入N
1 <= N <= 100000

输出格式:

对每一组输入,在一行中输出前N位中1的个数。

输入样例:

1
6

输出样例:

3

代码长度限制

16 KB

时间限制

1000 ms

内存限制

64 MB

题目分析

 将每一段分组

value = value ^ 3;//确定第p组内元素的value是多少、(1,2)和3异或为(2,1)

count = magic[++p];//创建完第p组所有元素后,获得下一组需要创建的元素个数;

贴一个链接

图解LeetCode——481. 神奇字符串(难度:中等)_爪哇缪斯的博客-CSDN博客

题目代码 

import java.io.FilterOutputStream;
import java.util.Scanner;

public class 神奇字符串 {
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        int n = sca.nextInt();
        int res = 0;//结果
        while (n-- > 0) {
            int m = sca.nextInt();
            //创建神奇的数组
            int magic[] = new int[m + 1];
            magic[0] = 1;//初始化第一个元素
            int tail = 1;//下标
            int p = 1;//组别
            int value = 1;
            res = 1;
            int count = 2;//一组多少个元素
            while (tail < m) {
                value = value ^ 3;//确定第p组内元素的value是多少、(1,2)和3异或为(2,1)
                while (count-- > 0 && tail < m) {
                    magic[tail++] = value;//赋值
                    if (value == 1) res++;
                }
                count = magic[++p];//创建完第p组所有元素后,获得下一组需要创建的元素个数;
            }
            System.out.println(res);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_61082895/article/details/129727478