日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

百练OJ:1835:宇航员

發布時間:2025/3/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 百练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米。
其中向上和向下如下圖所示:
輸入
第一行一個正整數m,表示測試數據的組數。每組測試數據第一行是一個正整數n(1<=n<=10000)表示宇航員行走的次數,下面n行每行輸入一次相對行走,格式如上所述,其中( 1 <= x <= 10000 為正整數)。
輸出
對于每組輸入數據輸出一行,x y z p, 中間用空格隔開,x y z是宇航員的位置的絕對坐標,p是宇航員面向的絕對方向編號(0<=p <=5)。
樣例輸入
1 6 left 10 right 11 up 12 down 13 forward 14 back 15
樣例輸出
23 -10 12 3

題目解析:這道題要完成的是對人的行動進行一個模擬,對于宇航員的描述可以分為五個要素(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);}} } 解題代碼:python

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)) 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)

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的百练OJ:1835:宇航员的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。