百练OJ:1835:宇航员
生活随笔
收集整理的這篇文章主要介紹了
百练OJ:1835:宇航员
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:1835:宇航員
描述
宇航員在太空中迷失了方向,在他的起始位置現在建立一個虛擬xyz坐標系,稱為絕對坐標系,宇航員正面的方向為x軸正方向,頭頂方向為z軸正方向,則宇航員的初始狀態如下圖所示:
現對六個方向分別標號,x,y,z正方向分別為0,1,2,負方向分別為3,4,5;稱它們為絕對方向。宇航員在宇宙中只沿著與絕對坐標系xyz軸平行的方向行走,但是他不知道自己當前絕對坐標和自己面向的絕對方向。
任務描述:
請根據宇航員對自己在相對方向上移動的描述確定宇航員最終的絕對坐標和面向的絕對方向。對在相對方向上移動的描述及意義如下:
forward x 向前走x米。
back x 先轉向后,再走x米。
left x 先轉向左,再走x米。
right x 先轉向右,再走x米。
up x 先面向上,再走x米。
down x 先面向下,再走x米。
其中向上和向下如下圖所示:
題目解析:這道題要完成的是對人的行動進行一個模擬,對于宇航員的描述可以分為五個要素(x,y,z)位置的三個數,宇航員的頭頂方向定義為:head,宇航員的正面朝向定義為:face。每次移動都是先對head和face的操作之后再移動, forward 不需要改變head/face,back的head不變,face掉轉一下即可,通過數字的關系得出:face=(face+3)%6 ;對于left/right轉向時候,head不變,face的改變直接用二維數組存起來。對于up,face變成head,head就變成了face的反向。對于down,head變成face方向,face變成head的反方向,不過在編程時,要注意要把要先更改的變量存儲起來。
方向更改之后,在face方向上進行增加。最終對于相對的兩個方向進行相減,得出最終位置。
題目代碼:java
package com.kyc;import java.util.Scanner;public class Main_1835 {public static void main(String[] args) {Scanner input =new Scanner (System.in);int [][] l={{6,5,1,6,2,4},{2,6,3,5,6,0},{4,0,6,1,3,6},{6,2,4,6,5,1},{5,6,0,2,6,3},{1,3,6,4,0,6}};int m=input.nextInt();while (m>0){int head=2,face=0;int [] faces={0,0,0,0,0,0};int n=input.nextInt();while (n>0){n=n-1;String dirc=input.next();int num=input.nextInt();switch(dirc){case "forward":break;case "back":face=(face+3)%6;break;case "left":face=l[head][face];break;case "right":face=l[face][head];break;case "up":int tem_face=face;face=head;head=(tem_face+3)%6;break;case "down":int tem_face2=face;face=(head+3)%6;head=tem_face2;break;}faces[face]+=num; }m=m-1;int x=faces[0]-faces[3];int y=faces[1]-faces[4];int z=faces[2]-faces[5];System.out.println(x+" "+y+" "+z+" "+face);}} } 解題代碼:pythonl=((6,5,1,6,2,4),(2,6,3,5,6,0),(4,0,6,1,3,6),(6,2,4,6,5,1),(5,6,0,2,6,3),(1,3,6,4,0,6)) m=int(input()) while m>0:head=2face=0faces=[0,0,0,0,0,0]n=int(input())while n>0:n=n-1str=input().split()dirc=str[0]num=int(str[1])if dirc=='forward':c=1elif dirc=='back':face=(face+3)%6elif dirc=='left':face=l[head][face]elif dirc=='right':face=l[face][head]elif dirc=='up':tem_face=faceface=headhead=(tem_face+3)%6else :tem_face=faceface=(head+3)%6head=tem_facefaces[face]+=numm=m-1x=faces[0]-faces[3]y=faces[1]-faces[4]z=faces[2]-faces[5]print (x,y,z,face)
總結
以上是生活随笔為你收集整理的百练OJ:1835:宇航员的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 花生问题——百练OJ:2950:摘花生与
- 下一篇: 百练OJ:2764:数根