概述
题目链接
题意及做法 (代码不是很容易理解)
以下代码源自Travel_poorly
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct
Point {
int x, y, z;
void
in() {
scanf("%d %d %d", &x, &y, &z);
}
bool
friend operator != (Point a, Point b) {
return a.x != b.x || a.y != b.y || a.z != b.z;
}
bool
friend operator == (Point a, Point b) {
return a.x == b.x && a.y == b.y && a.z == b.z;
}
}starta, enda, startb, endb;
int
fc(int x) {
return x / abs(x);
}
void
out() {
printf("(%d %d %d) (%d %d %d)n", starta.x, starta.y, starta.z, startb.x, startb.y, startb.z);
}
Point
//
nextMove(Point starta, Point enda) {
Point t = starta;
// 3个中只执行一个
if( starta.x != enda.x ) {
t.x += fc(enda.x - starta.x);
}
else if( starta.y != enda.y ) {
t.y += fc(enda.y - starta.y);
}
else if( starta.z != enda.z ) {
t.z += fc(enda.z - starta.z);
}
return t;
}
Point
randMove(Point a) {
int t = rand() % 6;
if( t == 0 ) {
a.x++;
}
else if( t == 1 ) {
a.x--;
}
else if( t == 2 ) {
a.y++;
}
else if( t == 3 ) {
a.y--;
}
else if( t == 4 ) {
a.z++;
}
else if( t == 5 ) {
a.z--;
}
return a;
}
int
main() {
starta.in();
enda.in();
startb.in();
endb.in();
out();
while( starta != enda || startb != endb ) {
Point nexta = nextMove(starta, enda);
Point nextb = nextMove(startb, endb);
// 不能在同一坐标上,也不能够交换位置
while( nexta == nextb || (starta == nextb && startb == nexta) ) {
nexta = randMove(starta);
nextb = randMove(startb);
}
starta = nexta;
startb = nextb;
out();
}
return 0;
}
(1)if()…else if()…
#include <stdio.h>
int
main() {
int a, b, c;
while( scanf("%d %d %d", &a, &b, &c) && a ) {
if( a < b ) {
printf("onen");
}
else if( b < c ) {
printf("twon");
}
else if( a > c ) {
printf("threen");
}
}
return 0;
}
/*
input: 1 2 3
output: one
并不会同时输出one, two。
*/
(2)曼哈顿距离(Manhattan Distance )详解+练习
最后
以上就是平淡猎豹为你收集整理的Gym101606G Gentlebots的全部内容,希望文章能够帮你解决Gym101606G Gentlebots所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复