import java.util.*;
class test4{
/*
输入数据:槽子的个数 球的个数=路径的个数
创建槽子的具体的容器 int[]
每一个小球下落的路径 L R 字符串
对于每一个小球而言其路径中的步骤是随机产生的L R
*/
public static void main(String[] args){
//1.提示用户输入槽子的个数和小球的个数
Scanner s=new Scanner(System.in);
System.out.print("输入球的个数");
int balls=s.nextInt();
System.out.print("输入槽的个数");
int slots=s.nextInt();
//2.根据已有的槽子个数去创建槽子容器
int[] arr=new int[slots];
//3.几个球几个路径(path)
for(int i=0;i<balls;i++){
String path=getPath(slots);
System.out.println(path);
arr[getR(path)]++;
}
System.out.println(Arrays.toString(arr));
show(arr);
}
public static void show(int[] arr){
int w=arr.length;
int h=0;
for(int i=0;i<arr.length;i++){
if(arr[i]>h){
h=arr[i];
}
}
for(int i=h-1;i>=0;i--){
for(int j=0;j<w;j++){
if(i<arr[j]){
System.out.print("O");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
public static int getR(String path){
int count=0;
for(int i=0;i<path.length();i++){
if(path.charAt(i)=='R'){
count++;
}
}
return count;
}
public static String getPath(int slots){
//根据槽子的个数计算计算每一个球下落的路径
Random r=new Random();
String path="";
for(int j=0;j<slots-1;j++){
if(r.nextInt(2)==0){//向左
path+="L";
}else{//向右
path+="R";
}
}
return path;
}
}
题目分析:拼接的关键在于两个数组的长度不确定,可能出现两个数组都为空,有一个数组为空,两个数组都不为空的情况;若两个数组都为空,则输出的数组也为空;若两个数组有一个为空,那么输出不为空的数组;若两个数组都不为空的情况也分为两个数组一样长,和两个数组不一样长的情况。
import java.util.*;
class test7{
public static void main(String[] args){
int[] list1={1,3,5,7,9};
int[] list2={2,4,6,8,10};
System.out.println(Arrays.toString(merge(list1,list2)));
}
/*
有序数组的合并
最主要的问题在于 数组之间有长有短
*/
public static int[] merge(int[] list1,int[] list2){
if(list1==null&&list2==null){
return null;
}
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
//只有两个都不是null的情况再考虑具体操作
int[] list3=new int[list1.length+list2.length];
int p1=0;
int p2=0;
int p3=0;
while(true){
if(p1==list1.length&&p2==list2.length){
break;
}
if(p1<list1.length&&p2==list2.length){
list3[p3++]=list1[p1++];
}else if(p1==list1.length&&p2<list2.length){
list3[p3++]=list2[p2++];
}else{
if(list1[p1]<=list2[p2]){
list3[p3++]=list1[p1++];
}else{
list3[p3++]=list2[p2++];
}
}
}
return list3;
}
}
import java.util.*;
class demo11{
/*
1.创建单词表
2.随机抽取一个单词--去单词的角标
3.创建单词状态表 用status表示 0或1的形式 默认为false 如果返回为false则表示此处为*,返回为true则返回为对应字符的字母
program
0000000 当显示为1时代表用户密文变成明文 0变成1
******* 当0变成1时,对应位置的*变成对应的字母
4.先要显示单词的密文形式ciphertext --根据单词的明文和状态表
5.输出密文并提示用户输入字母 用户输入的是字符
6.判断单词里面是否有这个字母
如果没有直接提示每次这个字母 并且miss++
如果有:判断该字母已经变成明文 true表示从未修改过,false表示已经修改过
7.是否结束--结束表示的是全显示为1
*/
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
Random random=new Random();
//1.创建单词表
String[] words={"program","apple","banana","happy","lucky"};
while(true){
//2.随机抽取一个单词
String word=words[random.nextInt(words.length)];
//3.创建单词状态表
boolean[] status=new boolean[word.length()];
//4.开始游戏
int miss=0;
while(true){
//5.根据单词和其状态表,决定其密文状态
String ciphertext=Getciphertext(word,status);
//6.输出密文
System.out.print("单词"+ciphertext+">");
//7.用户输入字母--用户输入的为字符串--此处要将字符串转化为字符形式
char letter=scanner.nextLine().charAt(0);
//8.判断单词中是否含有这个字母
if(isContainletter(word,letter)){
if(!isChangewordStatus(word,letter,status)){
System.out.println("\t"+letter+"该字母已存在");
}
}else{
System.out.println("\t"+letter+"不在单词中");
miss++;
}
if(isFinish(status)){
System.out.println("你错了"+miss+"次");
break;
}
}
System.out.print("你是否还继续?Enter y or n:");
String choice=scanner.nextLine();
if(choice.equals("n")){
System.out.println("游戏已结束");
break;
}
}
}
public static boolean isFinish(boolean[] status){
for(int i=0;i<status.length;i++){
if(!status[i]){
return false;
}
}
return true;
}
public static boolean isChangewordStatus(String word,char letter,boolean[] status){
for(int i=0;i<word.length();i++){
if(word.charAt(i)==letter){
if(status[i]){
return false;//说明已修改
}else{
status[i]=true;
}
}
}
return true;
}
public static boolean isContainletter(String word,char letter){
for(int i=0;i<word.length();i++){
if(word.charAt(i)==letter){
return true;
}
}
return false;
}
public static String Getciphertext(String word,boolean[] status){
String ciphertext="";
for(int i=0;i<word.length();i++){
if(status[i]){
ciphertext+=word.charAt(i);
}else{
ciphertext+="*";
}
}
return ciphertext;
}
}