杂题——试题-算法训练-P0604-runaround数

杂题——试题-算法训练-P0604-runaround数

分析:

  •  题目有三个关键点:
    • 一:结束时,回到起始位置(比较结束时和起始时的下标位置是否相同)
    • 二:该整数的所有数字都必须遍历一遍,且只能遍历一遍(把遍历过的数字做个标记)
    • 三:要走的步数超出整数的长度时,应该选择取余绕回整数的最左,而不是作减法,因为作减法后可能仍然超出整数长度
package no1_1;
import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
    	BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String s=reader.readLine();
        int len=s.length();
        int[] n=new int[len];
        for(int i=0;i0) {
        	int temp=n[index];
        	n[index]=0;//遍历过的数字都标记为0
        	if(index+temp>=len) {//当前下标加上行走的步数超出了数组长度,绕回数组最左边
        		index=(index+temp)%len;
        	}else {
        		index=index+temp;
        	}
        }
        //两重检查 
        if(index!=0) {//没有回到开头的位置
        	result="no";
        }else {//某个数字没有遍历到
        	for(int i=len-1;i>=0;i--) {
            	if(n[i]!=0) {
            		result="no";
            		break;
            	}
            }
        }
		System.out.println(result);
    }
}

 

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/3f5a689cd4.html