CF 465B.Inbox (100500)(Java实现)
题目分析
计算读取所有未读邮件所需的步数,其中1代表未读,0代表已读
思路分析
遍历邮件,如果当前是未读,那么所需步数+1,如果下一封也是未读,不用管(遍历后会直接+1),如果下一封是已读,那就回到目录(此时步数+1),直到遇到下一个未读(由于设定了未读+1,所以这里也不需要其他操作)。由于示例1,101区间是直接按顺序读过去的是三次,但是遇0回到目录再读仍然是3次,所以不影响。如果存入的数据没有1,那就输出0
代码
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n=sc.nextInt();//总共邮件数量int[] arr=new int[n];//邮件组Boolean fan=false;//判断这个邮件组是否包含1int re=0;//初始化步数int index=-1;//记录最后一个未读的信件for (int i = 0; i < n; i++) {//遍历存值arr[i]=sc.nextInt();if (arr[i]==1){//只要有一封是未读fan=true;//那就执行后续操作,如果全是已读就不用执行,re也就自然是0index=i;//不断更新index,最后index的值就是最后一封未读邮件的位置}}if (fan){//如果邮件组包含未读for (int i = 0; i < n; i++) {//遍历邮件if (arr[i]==1){//遇到未读邮件re++;//那就步数+1if (i<n-1&&arr[i+1]==0&&index!=i){//如果下一封是0,那就回到目录,如果这一封已经是最后一封那就不用+1,解释index!=ire++;//回到目录步数+1}}}}System.out.println(re);}
}
(走亲访友耽误两天,我胡汉三又回来啦)
感谢您能够看到这里,一起见证小何同学的算法学习,如果您有不同的见解,希望能得到您的指点和点悟;如果您是和我一样的同学,也希望这篇文章能对您有所帮助。