1.TCL面试
字符串的处理
package test2;
import java.util.Scanner;
public class a1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String buff = sc.nextLine();
String key = sc.nextLine();
int what = sc.nextInt();
int output = jsonGetValue(buff,key,what);
System.out.println(output);
}
public static int jsonGetValue(String data,String key,int what){
String []keys = key.split("\\.");
int loc = 0;
for(String k : keys ){
if(loc!=1)
loc = data.indexOf(k, loc);
else
loc = data.indexOf(k, loc+k.length());
System.out.println("loc"+loc);
}
int l1=data.indexOf("[", loc);
int l2=data.indexOf("]", loc);
String subS = data.substring(l1+1, l2);
String []vals = subS.split(",");
//System.out.println(key+":key");
//System.out.println(subS);
//for(String k : keys )
// System.out.println(k);
int val = Integer.parseInt(vals[what-1]);
return val;
}
}
2.科大讯飞
1.* 分糖果:科大讯飞编程题
* 小明和小红是好朋友,但最近遇到一个棘手的问题,有一盒糖果要分成两份但是每颗糖果质量都不尽相同,
* 但为了分配的公平每份糖的糖果数量相差不得超过1,在此条件下两份糖果的质量差距尽可能小。
* 输入一行数,包含一个数n,代表糖果数量,后面一次是n个整数一次表示每个糖果的质量,每个糖果的质量都是1到450
* 之间的一个整数,每盒最多有20个糖果。
* 输出:每个样例输出两个数字分别为两堆糖果的质量,如不相同,先小后大。
* 样例:输入:5 9 6 5 8 7
* 输出:17 18
import java.util.Scanner;
public class Main {
static int res,gap,target,n,sum;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int [] sugers = new int[n];
for(int i=0;i<n;i++){
sugers[i] = sc.nextInt();
sum += sugers[i];
}
target = sum / 2;
res = 0;
gap = Integer.MAX_VALUE;
search(sugers, 0, 0, 0);
if(res>sum-res)
System.out.println(sum-res + " " + res);
else
System.out.println(res + " " + (sum-res));
}
public static void search(int[] sugers, int weight, int index, int count)
{
if (count == n/2) {
if (gap > Math.abs(sum - 2 * weight)) {
res = weight;
gap = Math.abs(2 * weight - sum);
}
}
else {
if (index < sugers.length) {
search(sugers,weight, index + 1, count);
search(sugers, weight+sugers[index], index + 1, count+1);
}
}
}
}
2.小红非常喜欢素数,现有q组数(均为1,2,3,4,....n),他想知道针对每一组,第k个素数是多少?
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define MAX 100001
int isprime(int n){
int i=0;
if(n<=1)return 0;
for(i=2;i<=sqrt(n);i++)
if(n%i==0)break;
if(i<=sqrt(n))return 0;
else return 1;
}
int main(){
int isnum[MAX];
int n;
int t=1;
for (int i=2;;i++){
if(t>MAX)break;
if(isprime(i)){
isnum[t]=i;
t++;
}
}
scanf("%d",&n);
while(n--){
int temp=0;
scanf("%d",&temp);
printf("%d\n",isnum[temp]);
}
return 0;
}