滴滴笔试
不废话,上题目(两道题都是模拟题,模拟题就是条件很多,写起来要很仔细)
第一道题,给一个字符串,里面有许多?号,例如字符串
?12?0?9??,然后求满足条件的最小值
条件是,1,不能有前导0,2.?号代表的数不能和左右相邻的数相同,3.这个数要可以被三整除,以上面这个为例,最小的数是212101902
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int num=0;
int sum=0;
String str=in.next();
char[] ch=str.toCharArray();
int n=ch.length;
int[] arr=new int[n];
for(int i=0;i<n;i++){
if(ch[i]=='?'){
arr[i]=-1;
num++;
}
else {
arr[i]=ch[i]-48;
sum+=arr[i];
}
}
for(int i=0;i<n;i++){
if(arr[i]!=-1)continue;
for(int j=0;j<=9;j++){
if(i == 0){
if(num==1){
if(j!=0 && j!= arr[i+1]){
if((j+sum)%3==0){ arr[i]=j;
break; }
}
}else{
if(j!=0 && j!= arr[i+1]){
arr[i]=j;
num--;
sum+=j;
break;
}
}
}
if(i!=0){
if(num==1){
if(i!=n-1){
if(j != arr[i+1] && j != arr[i-1]){
if((j+sum)%3==0)arr[i]=j;
break;
}
}else{
if(j != arr[i-1]){
if((j+sum)%3==0){
arr[i]=j;
break;
}
}
}
}else{
if(j != arr[i+1] && j != arr[i-1]){
arr[i]=j;
num--;
sum+=j;
break;
}
}
}
}
}
for(int i=0;i<n;i++){
System.out.print(arr[i]);
}
}
}
第二道题 小明正在刷栅栏。为了使得栅栏在经过风吹雨打后依然不掉色,需要用两种不同的油漆刷栅栏。 栅栏被按顺序编号为1到1000000000。每一段栅栏需要至少刷 p 遍的1号油漆和 q 遍的2号油漆后才能保证长时间不掉色。 每次刷漆都会使用某种类型的油漆,并将编号属于某个区间内的栅栏都刷上这种油漆。 现在给出每次刷漆的栅栏编号范围和油漆种类,请你求出有多少段栅栏能够长时间不掉色。 * 输入描述 第一行有三个正整数n,p,q(1<=n<=100000,1<=p,q<=n),代表刷漆的次数,以及两个参数 p 和 q。 第二到四行给出了一个大小为3*n的矩阵,第 i 列的三个数从上到下记为l,r,t(1<=l,r<=1000000000,1<=t<=2), * 代表第i次刷漆将编号在 l 到 r 之间的栅栏刷了一遍 t号油漆。 * 输入示例 5 2 2 1 1 2 3 2 3 5 4 5 4 1 2 1 1 2 * 输出示例 * 3代码:
import java.util.*; public class Main{ public static void main(String[] args) { Scanner in= new Scanner(System.in); int res=0; int n=in.nextInt(); int p=in.nextInt(); int q=in.nextInt(); int max=0; int [][] t=new int[3][n]; for(int i=0;i<3;i++){ for(int j=0;j<n;j++){ t[i][j]=in.nextInt(); max=Math.max(t[i][j],max); } } //System.out.println(max); int[][] arr= new int[max+1][2]; //System.out.println(Arrays.deepToString(t)); for(int i=0;i<n;i++){ for(int j=t[0][i];j<=t[1][i];j++){ int temp=t[2][i]; arr[j][temp-1]++; } } for(int i=0;i<=max;i++){ if(arr[i][0]>=p && arr[i][1]>=q)res++; } System.out.println(res); } }只通过了82%,不知道为啥