请你只用switch语句不使用if语句实现编程:有4个圆塔。圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1,这4个塔的高度为10, 塔以外无建筑物,今输入任意一点的坐标,求该点的建筑高度(塔外高度为0)
时间: 2023-08-31 18:43:05 浏览: 88
### 回答1:
```c++
#include <iostream>
using namespace std;
int main() {
double x, y;
int height = 0;
cout << "请输入坐标(x,y):" << endl;
cin >> x >> y;
switch ((int)x+2) {
case 0:
switch ((int)y+2) {
case 0:
height = 10;
break;
case 1:
height = (y+2<2) ? 10 : 0;
break;
case 2:
height = (y-2>-2) ? 10 : 0;
break;
}
break;
case 1:
height = ((x-2)*(x-2) + (y-2)*(y-2) < 1) ? 10 : 0;
break;
case 2:
height = (((x+2)*(x+2) + (y-2)*(y-2) < 1) || ((x-2)*(x-2) + (y+2)*(y+2) < 1)) ? 10 : 0;
break;
case 3:
height = ((x+2)*(x+2) + (y+2)*(y+2) < 1) ? 10 : 0;
break;
}
cout << "该点的建筑高度为:" << height << endl;
return 0;
}
```
思路:
由于是四个圆塔,我们可以将四个圆塔当成坐标系中的四个象限,分别用 $[0,1]$ 的数给每个象限进行编码,再根据点的坐标落在哪个象限,进一步判断是否在圆塔内,从而得到建筑的高度。
这里采用了嵌套的 switch 语句和三目运算符来实现条件判断和赋值。
### 回答2:
可以使用switch语句实现以下代码来实现该功能:
```java
import java.util.Scanner;
public class TowerHeight {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个点的坐标(x, y):");
int x = scanner.nextInt();
int y = scanner.nextInt();
scanner.close();
double distance1 = Math.sqrt((x - 2) * (x - 2) + (y - 2) * (y - 2));
double distance2 = Math.sqrt((x + 2) * (x + 2) + (y - 2) * (y - 2));
double distance3 = Math.sqrt((x + 2) * (x + 2) + (y + 2) * (y + 2));
double distance4 = Math.sqrt((x - 2) * (x - 2) + (y + 2) * (y + 2));
int towerHeight = 0;
switch(findClosestTower(distance1, distance2, distance3, distance4)) {
case 1:
towerHeight = 10;
break;
case 2:
towerHeight = 10;
break;
case 3:
towerHeight = 10;
break;
case 4:
towerHeight = 10;
break;
default:
towerHeight = 0;
break;
}
System.out.println("该点的建筑高度为:" + towerHeight);
}
public static int findClosestTower(double distance1, double distance2, double distance3, double distance4) {
if (distance1 < distance2 && distance1 < distance3 && distance1 < distance4) {
return 1;
} else if (distance2 < distance3 && distance2 < distance4) {
return 2;
} else if (distance3 < distance4) {
return 3;
} else {
return 4;
}
}
}
```
在代码中,我们首先通过输入获取用户输入的坐标(x, y)。然后计算该点到四个塔的距离,通过调用`findClosestTower`方法,确定与该点最近的塔的编号。最后,根据最近的塔的编号,在switch语句中给`towerHeight`赋予相应的值。如果最近的塔编号不在1-4之间,则`towerHeight`默认为0。最后,输出建筑物的高度。
### 回答3:
switch语句是一种用于多分支选择的控制语句,所以在这个问题中,我们可以通过switch语句来判断输入点的位置,并返回相应的建筑高度。
首先,我们可以定义四个常量来表示四座塔的圆心坐标和半径:
const float TOWER1_X = 2.0;
const float TOWER1_Y = 2.0;
const float TOWER2_X = -2.0;
const float TOWER2_Y = 2.0;
const float TOWER3_X = -2.0;
const float TOWER3_Y = -2.0;
const float TOWER4_X = 2.0;
const float TOWER4_Y = -2.0;
const float TOWER_RADIUS = 1.0;
然后,我们需要接收用户输入的坐标:
float userX, userY;
cout << "请输入一个点的横坐标:";
cin >> userX;
cout << "请输入一个点的纵坐标:";
cin >> userY;
接下来,我们可以根据用户输入的坐标进行判断。在switch语句中,我们将用户输入的坐标和各个塔的坐标进行比较,如果输入的坐标在某一座塔的圆内,就返回该塔的高度;如果输入的坐标不在这四座塔的圆内,就返回塔外高度0。
switch(userX, userY) {
case (userX - TOWER1_X) * (userX - TOWER1_X) + (userY - TOWER1_Y) * (userY - TOWER1_Y) <= TOWER_RADIUS * TOWER_RADIUS:
cout << "该点的建筑高度为10";
break;
case (userX - TOWER2_X) * (userX - TOWER2_X) + (userY - TOWER2_Y) * (userY - TOWER2_Y) <= TOWER_RADIUS * TOWER_RADIUS:
cout << "该点的建筑高度为10";
break;
case (userX - TOWER3_X) * (userX - TOWER3_X) + (userY - TOWER3_Y) * (userY - TOWER3_Y) <= TOWER_RADIUS * TOWER_RADIUS:
cout << "该点的建筑高度为10";
break;
case (userX - TOWER4_X) * (userX - TOWER4_X) + (userY - TOWER4_Y) * (userY - TOWER4_Y) <= TOWER_RADIUS * TOWER_RADIUS:
cout << "该点的建筑高度为10";
break;
default:
cout << "该点的建筑高度为0";
}
最后,根据用户输入的坐标在switch语句中做出判断,并输出该点的建筑高度。
这样,我们就实现了用switch语句而不使用if语句来根据用户输入的坐标判断建筑高度的功能。
阅读全文