Um certo palácio da juventude introduziu um lote de carros de robô. Você pode aceitar instruções pré-entrelaçadas e segui-las. Os movimentos básicos de um carro são muito simples, existem apenas 3 tipos: vire à esquerda (gravado como L), vire à direita (gravado como R) e anda alguns centímetros (registro diretamente).
Por exemplo, podemos entrar no seguinte comando no carro:
15L10R5LRR10R20
Em seguida, o carro irá primeiro direto para 15 cm, vire à esquerda e depois caminhará 10 cm e depois vire à direita, ...
Não é difícil ver que, para essa sequência de comando, o carro retornou ao seu ponto de partida.
Sua tarefa é: escreva um programa, instruções de entrada do usuário e o programa produz a distância da linha reta entre a posição do carro após a execução de cada instrução e a posição do carro antes da instrução ser executada.
[Requisitos de formato de entrada e saída]
O usuário primeiro insere um número inteiro n (n <100), indicando que haverá instruções N a seguir.
Em seguida, insira as instruções n. Cada instrução consiste apenas em L, R e números (os números são inteiros entre 0 e 100)
Cada instrução não tem mais de 256 caracteres de comprimento.
O programa produz n linhas de resultados.
Cada resultado representa a distância da linha reta entre as posições frontal e traseira do carro ao executar o comando correspondente. Requer arredondamento para 2 lugares decimais.
Por exemplo: entrada do usuário:
5
L100R50R10
3lll5rr4l12
Ll
100r
5L5L5L5
Então o programa sai:
102.96
9.06
0,00
100,00
0,00
Código:
importar java.util.*; classe Fushu {public Double Real; imagem dupla pública; public fushu () {real = 0; imagem = 0; } public fushu (duplo r, duplo i) {real = r; imagem = i; } public fushu dot (fushu x) {fushu r = new fushu (); r.real = real * x.real - imagem * x.image; r.image = real * x.image + imagem * x.real; retornar r; } public fushu dot (duplo r, duplo i) {fushu t = new fushu (); t.real = real * r - imagem * i; t.image = real * i + imagem * r; retornar t; }} classe robot {private int x = 0; private int y = 0; private Fushu dir = novo Fushu (1,0); public void Walk (String s) {int sum = 0; for (int i = 0; i <s.Length (); i ++) {char c = s.charat (i); if (c == 'l' || c == 'r') {x += sum * dir.real; y += soma * DIR.IMAGE; soma = 0; if (c == 'l') dir = dir.dot (0,1); else dir = dir.dot (0, -1); } else soma = soma * 10 + (c-'0 '); } x += soma * dir.real; y += soma * DIR.IMAGE; } public void show () {duplo d = math.sqrt (x*x + y*y); System.out.println (x + "," + y + "dir:" + dir.real + "," + dir.image + ", d =" + d); }} classe pública Walk {public static void main (string [] args) lança exceção {robot t = new robot (); T.Walk ("3R4"); t.show (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.