1.模拟触摸屏的手势判断
描述: 如今电子产品触摸屏非常普及,触摸屏最重要的特点是要感知用户的手势,如,感知手指是向上下左右哪个方向滑动。请编写程序,输入用户手势轨迹上两个点坐标x1,y1和x2,y2,输出表示手势方向字符串(UP,DOWN,LEFT或者RIGHT),如果两点坐标相同,则输出字符串CLICK,表示是点击操作。假设屏幕左上角为坐标原点(0, 0),横向为x坐标,竖向为y坐标,输入4个数字以空格隔开。如果手势刚好是45度角方向,则根据x坐标方向判定为LEFT或者RIGHT。
运行时间限制: 无限制
内存限制: 无限制
输入: 输入两个点坐标x1 y1 x2 y2
输出: 输出表示手势的字符串UP,DOWN,LEFT,RIGHT或CLICK(大写)
样例输入: 10 10 20 30
样例输出: DOWN
import java.util.Scanner;
public class main_1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=0,b=0,c=0,d=0;
Scanner sc=new Scanner(System.in);
if(sc.hasNext())
{
a=sc.nextInt();
b=sc.nextInt();
c=sc.nextInt();
d=sc.nextInt();
}
if(a==c&&d==b)System.out.println("TOUCH");
else if(c-a>=0)
{
if(Math.abs(d-b)<=Math.abs(c-a)&&d-b>=0)System.out.print("RIGHT");
else if(Math.abs(d-b)<=Math.abs(c-a)&&d-b<0)System.out.print("LEFT");
else System.out.print("DOWN");
}else if(c-a<0)
{
if(Math.abs(d-b)<=Math.abs(c-a)&&d-b>=0)System.out.print("RIGHT");
else if(Math.abs(d-b)<=Math.abs(c-a)&&d-b<0)System.out.print("LEFT");
else System.out.print("UP");
}
}
}
有一个测试用例没过,不太清楚原因。
上面的算法先将点分为向上,向下;可以进一步简化:
if(a==c&&d==b)System.out.println("TOUCH");
else if(c>a&&Math.abs(c-a)>=Math.abs(d-b))System.out.println("RIGHT");
else if(c<a&&Math.abs(c-a)>=Math.abs(d-b))System.out.println("LEFT");
else if(d>b&&Math.abs(c-a)<Math.abs(d-b))System.out.println("DOWN");
else if(d<b&&Math.abs(c-a)<Math.abs(d-b))System.out.println("UP");
2. 掉坑? 名字没记
小明在一条小路上行走,每步的步长为65厘米,这条路上有很多坑。小明只要一只脚踏入坑中就会掉下去,请判断小明是否能安全通过这条小路。
假设路的起点坐标为0,终点坐标为500,单位为米。输入偶数个正整数,以空格分隔,每2个正整数用于描述一个坑,第一个表示坑的起点坐标,单位为米,第二个整数表示坑的宽度,单位为厘米。输入的坑之间是无序的。
如输入11 87 20 50,表示在11米处有个80cm的坑,在20米处有个50cm的坑。如果小明能安全通过,则输出YES,如果会掉坑里,则输出NO。刚好踩在坑沿上不会掉下去。
运行时间限制: 无限制
内存限制: 无限制
输入: 输入偶数个正整数,以空格分隔,每2个正整数用于描述一个坑,第一个表示坑的起点坐标,单位为米,第二个整数表示坑的宽度,单位为厘米。输入的坑之间是无序的。
输出: 如果小明能安全通过,输出YES,否则输出NO。另外,刚好踩在坑的边沿上不会掉下去。
样例输入: 1 30
样例输出: YES
答案提示: 注意单位换,另外,刚好踩在坑的边沿上不会掉下去
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class main_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = null;
StringBuilder sb = new StringBuilder();
input = br.readLine();
while(!input .equals("")){
sb.append(input.trim());
sb.append(" ");
input = br.readLine();
}
String[] temp=sb.toString().trim().replaceAll("\\s+", " ").split(" ");
for(int i=0;i<temp.length-1;)
{
if(Integer.parseInt(temp[i+1])>65)
{
System.out.println("NO");
}else if((Integer.parseInt(temp[i])*100/65+1)*65>=
(Integer.parseInt(temp[i])*100+Integer.parseInt(temp[i+1])))
{
System.out.println("YES");
}else System.out.println("NO");
i+=2;
}
}
}
程序的问题在于 需要多输入一个回车才能结束输入 实在不知道这种情况下应该怎样结束输入。如有朋友知道,请告诉我,这其实是一个非常重要的地方。
3.公司电脑设备管理
描述: 本系统,可以管理公司电脑的一些常用信息,主要功能如下:
1)入库电脑,即公司通过其他电脑设备公司购买新电脑后,需要把这些电脑先进行编号,然后添加到管理库中,电脑编号长度小于等于10位,由字母和数字组成,一个电脑编号只能唯一对应一台电脑。
2)清除电脑,当电脑坏掉,或者年生太久不能再使用时,需要清理出管理库。
3)员工领用电脑。领用时需要输入员工ID,员工ID长度固定为8位阿拉伯数字组成的字符串。一台电脑只能由一名员工领用,但一名员工可以同时领多台电脑,员工ID是员工的唯一识别码。
4)员工退还电脑。
5)统计所有员工当前正在使用的电脑,并按照员工工号由小到大的顺序输出,如果一名员工拥有在多台电脑,还需要进行2次排序,即按照电脑的编号进行排序,排序规则为:字典排序法,按照字母编码从小到大进行。
运行时间限制: 无限制
内存限制: 无限制
输入: 整数M,增加的电脑数量;整数N,清除电脑数量;整数P,员工领用电脑数量;整数Q,员工退还的电脑数量
M行字符串,电脑标识号,每行标识一台增加的电脑;如果失败,输出"add computer error:"+电脑标识号;成功不输出
N行字符串,电脑标识号,每行标识一台清除的电脑;如果失败,输出"remove computer error:"+电脑标识号;成功不输出
P行字符串,电脑标识号和员工工号,每行标识员工领用一台电脑;如果失败,输出"assign new computer
error:"+电脑标识号+员工工号;成功不输出
Q行字符串,电脑标识号和员工工号,每行标识员工退还的一台电脑;如果失败,输出"send back computer error:"+电脑标识号和员工工号;成功不输出
输出: 统计所有员工当前正在使用的电脑,并按照员工工号由小到大的顺序输出,如果一名员工拥有在多台电脑,还需要进行2次排序,即按照电脑的编号进行排序,排序规则为:字典排序法,按照字母编码从小到大进行。
整数K,所有员工当前正在使用的电脑的数量字符串,电脑排序后的结果,"工号_电脑号"
样例输入: 3 2 2 1
SN001
SN002
SN003
SN003
SN004
SN001 12345678
SN002 12345678
SN002 12345678
样例输出: remove computer error:SN004
1
12345678_SN001
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.TreeMap;
public class main_3 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = null;
StringBuilder sb = new StringBuilder();
input = br.readLine();
while (!input.equals("")) {
sb.append(input.trim());
sb.append(" ");
input = br.readLine();
}
TreeMap<String, Integer> a = new TreeMap();
// jieshou shuru
String[] temp = sb.toString().trim().replaceAll("\\s+", " ").split(" ");
int m = Integer.parseInt(temp[0].toString());
int n = Integer.parseInt(temp[1].toString());
int p = Integer.parseInt(temp[2].toString());
int q = Integer.parseInt(temp[3].toString());
// insert
for (int i = 4; i < m + 4; i++) {
if (temp[i].length() > 10 || a.get(temp[i]) != null) {
System.out.println("add computer error:" + temp[i]);
} else
a.put(temp[i], 0);
}
// delete
for (int i = 4 + m; i < 4 + m + n; i++) {
if (temp[i].length() > 10 || a.get(temp[i]) == null) {
System.out.println("remove computer error:" + temp[i]);
} else
a.remove(temp[i]);
}
// borrow computer
for (int i = 4 + m + n; i < 4 + m + n + 2 * p;) {
if (temp[i].length() > 10 || a.get(temp[i]) == null
|| Integer.parseInt(a.get(temp[i]).toString()) != 0) {
System.out.println("assign new computer error:" + temp[i] + "_"
+ temp[i + 1]);
} else {
a.remove(temp[i]);
a.put(temp[i], Integer.parseInt(temp[i + 1]));
}
i = i + 2;
}
// return computer "send back computer error:"+电脑标识号和员工工号
for (int i = 4 + m + n + 2 * p; i < temp.length;) {
if (temp[i].length() > 10
|| a.get(temp[i]) == null
|| Integer.parseInt(a.get(temp[i]).toString()) != Integer
.parseInt(temp[i + 1])) {
System.out.println("send back computer error:" + temp[i] + "_"
+ temp[i + 1]);
} else {
a.remove(temp[i]);
a.put(temp[i], 0);
}
i = i + 2;
}
// System.out.println(a.size());
StringBuilder test = new StringBuilder();
int temp2 = Integer.valueOf(a.size());
int temp3 = 0;
String[] container = null;
for (int i = 0; i < temp2; i++) {
// System.out.println(a.lastKey());
if (Integer.parseInt(a.get(a.lastKey()).toString()) != 0) {
test.append(a.get(a.lastKey()).toString() + "_"
+ a.lastKey().toString().trim());
test.append(" ");
temp3++;
}
container = test.toString().trim().split(" ");
a.remove(a.lastKey());
// System.out.println(container[i]);
}
System.out.println(container.length);
if (container.length == 1) {
System.out.println(container[0]);
} else if (container.length > 1) {
sortStringArray(container);
for (int i = 0; i < container.length; i++) {
System.out.println(container[i]);
}
}
}
public static void sortStringArray(String[] arrStr) {
String temp;
for (int i = 0; i < arrStr.length; i++) {
for (int j = arrStr.length - 1; j > i; j--) {
if (arrStr[i].compareTo(arrStr[j]) > 0) {
temp = arrStr[i];
arrStr[i] = arrStr[j];
arrStr[j] = temp;
}
}
}
}
}
这道题样例输入可以过,但是测试用例没有过,同样不清楚原因。。