四道题时间完全不够呀,只做了两道,ac了第一道,第二道没有全部ac,下来改了下应该没问题了
1.第一道题是统计可以用的厕所个数的问题,
这个思路很简单,判断自己商铺有没有厕所,没有的话给左右两边搜索,左右不为零的话取最小值,否则取最大值(代码中是相加,效果一样)
package exam;
import java.util.Scanner;
public class demo4 {
public static int[] WcNum(int n,String st){
char[] ch=st.trim().toCharArray();
int[] num=new int[n];
for(int i=0;i<n;i++){
int left=0, right=0,j=i,k=i;
while(j>=0&&ch[j]=='X'){
if(j==0) {left=0;break;}
j--;
left++;
}
while(k<n&&ch[k]=='X'){
if(k==(n-1)) {right=0;break;}
k++;
right++;
}
if(left==0||right==0) num[i]=(right+left);
else num[i]=Math.min(left, right);
}
return num;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=Integer.parseInt(in.nextLine());
String st = in.nextLine();
int[] num=WcNum(n,st);
for(int x:num)
System.out.print(x+" ");
}
}
2.第二道是计算最少放弃几道题的问题,
这道题对每个位置前面的数列进行排序,然后累计相加比较即可
package exam;
import java.util.Scanner;
public class demo4 {
public static int[] WcNum(int n,String st){
char[] ch=st.trim().toCharArray();
int[] num=new int[n];
for(int i=0;i<n;i++){
int left=0, right=0,j=i,k=i;
while(j>=0&&ch[j]=='X'){
if(j==0) {left=0;break;}
j--;
left++;
}
while(k<n&&ch[k]=='X'){
if(k==(n-1)) {right=0;break;}
k++;
right++;
}
if(left==0||right==0) num[i]=(right+left);
else num[i]=Math.min(left, right);
}
return num;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=Integer.parseInt(in.nextLine());
String st = in.nextLine();
int[] num=WcNum(n,st);
for(int x:num)
System.out.print(x+" ");
}
}
后面两道题希望有人可以解答
一个是请示领导顺序的问题
还有一个是重复序列的长度个数的问题