题目描述

小蓝最近迷上了一款名为“劲舞团”的游戏,具体来说,只要按照游戏中给出的键位提示依次按出对应的键位,游戏人物便可以跟随节奏跳舞。对于连续的 K 次正确敲击,如果任意连续的两次敲击间间隔时间都小于等于 1s,那么 我们称这是一次 K 连击。现在给出一局小蓝的游戏记录文件,log.txt 中记录了 N 条记录,每条记录有三个字段,依次为正确的敲击字符、小蓝打出的字符、打出字符的时间对应的毫秒时间戳。现在请你计算下最长的 K 连击是多少,你 只需要输出 K 的值。

这是一道填空题,下面附上我的代码,本人初学者水平有限,答案是9,我的代码跑出来是8,是因为当为二连击时,我才开始计算为连击,理解和题目有些出入,我刚开始以为两次才算一连击,然后后面通不过洛谷测试查看答案才发现有偏差,经过测试代码除了这点缺陷其他没有任何问题,过程有点冗余,恳请大神指导!共同进步!

import java.io.FileNotFoundException;

import java.util.Scanner;

import java.io.File;

public class Main {

public static void main(String[] args) {

String filePath="C:\\Users\\xiaomi\\Desktop\\log.txt";

int max=0;

long time1=0;

long time2=0;

int location=0;

int linenumber=0;

try {

// 创建 Scanner 对象

Scanner scanner = new Scanner(new File(filePath));

// 逐行读取文件

int temp=0;

while (scanner.hasNextLine()) {

linenumber++;

String line = scanner.nextLine();

String part1,part2;

String[] wordline=line.split(" ");

part1=wordline[0];

part2=wordline[1];

//每次的时间

time1=Long.parseLong(wordline[2]);

//如果两次都敲击对的两组数据时间间隔小于一秒就记为一次连击

if (part1.equals(part2)&&(time1-time2)<1000&&(linenumber-location)==1) {

temp++;

}

if (temp>max) {

max=temp;

}

//如果出现了没敲击对的情况直接清空连击次数,或者时间间隔超过1000

else if((time1-time2)>1000||!(part1.equals(part2))){

temp=0;

}

//符合条件的时间

if(part1.equals(part2))

{

time2=Long.parseLong(wordline[2]);

location=linenumber;

}

// System.out.println(line);输出文档

}

// 关闭 Scanner

scanner.close();

} catch (FileNotFoundException e) {

System.out.println("文件未找到: " + e.getMessage());

}

System.out.println(max);

}

}

Logo

集算法之大成!助力oier实现梦想!

更多推荐