京东2017笔试编程题

package jingdong;

import java.util.HashSet;
import java.util.Scanner;

/**站队(京东2017实习生真题)
 * 输入有两行,第一行一个数n(1<=n<=100000),接下来一行有一个长度为n的字符串,依次表示队伍中的每一个人。
 * 如果某一位是1-9的某个数字x,表示这一位是一个能力值为x的警察;如果某一位是字符X表示这一位是小偷;
 * 如果某一位是字符#表示这是一个普通人。输入保证不会出现其它字符。
 * 输出一个数,整条队伍中被警察发现的小偷总数。 
 */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.next();
HashSet<Integer> index = new HashSet<Integer>(); 

for(int i = 0;i<n;i++){
if( Character.isDigit(s.charAt(i))){
int l = s.charAt(i) - '0';
for(int j = i-l;j<= i+l;j++){
if(  s.charAt(j)=='X'){
index.add(j);
}
}
}
}
System.out.println(index.size());

}


/**
* 激光炮只能发射两次。可以认为激光炮放在坐标轴的原点处,并向y轴正方向发射。每辆运输车可以看作是一个矩形,起始的x轴坐标为Xi ,所有的车均位于第一象限,
* 长度为Li,速度为1,朝x轴负方向运动。即经过t时间后,该车车头的x坐标为Xi-t,车尾坐标为Xi-t+Li 。只要打中车的任何一个部分就算击中。
* 请你算算,他在哪两个时刻发射,才能摧毁最多的运输车。
* 终结者:第一行一个正整数 n ( 2≤N≤200 ),表示运输个的数量。接下来n行,每行两个整数X和L(1≤X、L≤109),表示一辆车的x轴坐标和长度。
* 输出最多可以摧毁的运输车数量。
*/
public static void main(String[] args) {
//考虑每辆车的车头坐标和车尾坐标,将车辆相对不动。将车头坐标作为激光炮的位置,变换两个激光炮的位置,统计可以击中的车辆总数
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] X = new int[n];
int[] L = new int[n];
int[] Y = new int[n]; //得到车辆车头坐标和车尾坐标
for(int i= 0;i<n;i++){
X[i] = sc.nextInt();
L[i] = sc.nextInt();
Y[i] = X[i] + L[i];
}
int max = 0;
for(int i =0;i<n;i++){
for(int j = 0;j<n;j++){
int sum = 0;
for(int k = 0;k<n;k++){
if(X[i] >= X[k] && X[i] <= Y[k] ||X[j] >= X[k] && X[j] <= Y[k]  ){
sum++;
}
if(sum>max){
max = sum;
}
}

}
}
System.out.println(max);

}


//异或运算:输入有三行,第一行一个数n(1<=n<=20),接下来两行有两个n位二进制数。输入的二进制数可能有前导零
//输出一个数,异或结果的十进制数值,不要输出前导零。
public static void main(String[] args) {
//方法一
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
       String s = sc.next();
       char[] A = s.toCharArray();
char[] B = sc.next().toCharArray();

int[] C = new int[n];
int d = 0;
for(int i = 0;i<n;i++){
if(A[i] != B[i]){
d += (int)Math.pow(2, n-i-1);
}
}
System.out.println(d);

//方法二
Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String a = sc.next();
        String b = sc.next();
           
        int num_a = Integer.parseInt(a, 2);
        int num_b = Integer.parseInt(b, 2);
        
         System.out.println(num_a^num_b);  //^为异或运算符。
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值