腾讯笔试
【题目1】删除节点
给出一个单链表,删除一个节点,输出删除后的所有节点的值
输入两行。
第一行n,k,表示原链表长度n,要删除第k个节点。
第二行n个整数表示原链表每个节点的值。
【代码】100%
import java.util.Scanner;
public class 腾讯_单链表删除一个节点后输出 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int k=scanner.nextInt();
StringBuilder sb=new StringBuilder("");
for(int i=0;i<k-1;i++) {
int x=scanner.nextInt();
sb.append(x+" ");
}
int x1=scanner.nextInt();
for(int i=k-1;i<n-1;i++) {
int x=scanner.nextInt();
sb.append(x+" ");
}
System.out.println(sb.toString());
}
}
【题目3】
数字拆分
将n拆成两个数a和b,使得n=a+b且自定义价值val=s(a)+s(b)最大。
s(x)表示x的数位和,例如x=123,s(x)=1+2+3=6。
求可选拆分方案的最大val
【代码】100%
/*
* 数字拆分
* 将n拆成两个数a和b,使得n=a+b且自定义价值val=s(a)+s(b)最大。
* s(x)表示x的数位和,例如x=123,s(x)=1+2+3=6。
* 求可选拆分方案的最大val
*/
import java.util.Scanner;
public class 腾讯_数字拆分 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int num=in.nextInt();
long[]data=new long[num];
for(int i=0;i<num;i++) {
data[i]=in.nextLong();
}
for(long ele:data) {
System.out.println(help(ele));
}
}
static long help(long num) {
long a=0,b=0;
if(num<=9) {
return num;
}
long weight=1;
while(num!=0) {//a和b从尽可能多的从个位到高位产生9
long val=9*weight;
if(num>=val) {
a+=val;
num-=val;
}else {
a+=num;
num=0;
}
if(num>=val) {
b+=val;
num-=val;
}else {
b+=num;
num=0;
}
weight*=10;
}
long res=0;
while(a!=0) {
res+=a%10;
a/=10;
}
while(b!=0) {
res+=b%10;
b/=10;
}
return res;
}
}