题目:豆机
代码实现:
import java.util.*;
class Class32{
/*
球的路径由层决定
球能进入槽,要经过solts-1层,每一层都有左右两个方向(L和R)
都为L是左边第一个槽,都为R为右边第一个槽
进入从左到右槽的路径中R的个数递增
0个R,1个R,....solts-1个R
*/
public static void main(String[] args) {
//提示用户输入球数
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the number of balls to drop:");
int balls=scanner.nextInt();
//提示用户输入槽数
System.out.print("Enter the number of slots in the bean machine:");
int slots=scanner.nextInt(); //进过的层数为solts-1
//模拟槽创建一个数组
int[] a=new int[slots];
//根据球的个数创建路径
for(int i=0;i<balls;i++){ //遍历球数
String path=""; //创建一个空串,存放路径
for(int j=0;j<slots-1;j++){ //遍历层数
path+=Math.random()>0.5?"L":"R"; //调用随机数输出路径
}
System.out.println(path); //打印每个球的path
a[getLocation(path)]++; //让R的个数对应的槽的球+1
}
//打印槽中球的情况
for(int i=0;i<a.length;i++){ //遍历数组a
System.out.print("slots"+i+":"); //显示行对应的槽
for(int j=0;j<a[i];j++){ //遍历对应槽球的个数
System.out.print("O"); //打印球
}
System.out.println(); //换行
}
}
//函数getLocation返回path中R的个数
public static int getLocation(String path){
int count=0; //用于记录R的个数
for(int i=0;i<path.length();i++){ //遍历path
//如果path中的字符和R相等,count++
if((path.charAt(i)+"").equals("R")){
count++;
}
}
return count; //返回
}
}
题目:连续相等的四个数
代码实现:
import java.util.Scanner;
class Class33{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.获取数组的长度
System.out.print("Enter the number of values:");
int[] a=new int[scanner.nextInt()];
//2.给数组赋值元素
System.out.print("Enter the values:");
for(int i=0;i<a.length;i++){
a[i]=scanner.nextInt();
}
//3、调用函数输出
if(isConsecutiveFour(a)){
System.out.println("The list has consetive fours");
}else{
System.out.println("The list has no consetive fours");
}
}
//4、函数isConsecutiveFour判断数组是否有四个连续相等的数
public static boolean isConsecutiveFour(int[] values ){
int count = 1; //计数
for(int i = 0;i<values.length-1;i++){
if(values[i+1] == values[i]){ //如果后面的等于前面的count++
count++;
if(count == 4) //有连续四个时返回
return true;
}
else{
count = 1; //否则count重置为1
}
}
return false;
}
}
题目:回文素数
代码实现:
class Home26{
public static void main(String[] args){
print(100); //调用函数
}
public static void print(int n){
int number=2; //素数初始从2遍历
int count=0;
while(count<n){ //因为不知道循环多少个数字,用while循环
if(isPrime(number)&&isReverse(number)){ //调用两个方法
count++;
if(count%10==0){ //一行十个数字
System.out.print(number+"\n");
}else{
System.out.print(number+"\t");
}
}
number++;
}
}
//判断是否是素数
public static boolean isPrime(int number){
for(int j=2;j<=number/2;j++){ //对于number当不能被2到number/2之间的数字整除就是素数
if(number%j==0){
return false;
}
}
return true;
}
//判断是否是回文
public static boolean isReverse(int number){
int temp=number; //定义临时变量,一会用于与倒序后的数对比
int res=0; //定义res存放倒序后的数
while(true){
if(number==0){ //跳出循环条件
break;
} //1234
int a=number%10; //4 3 2 1
res=res*10+a; //4 43 432 4321
number/=10; //123 12 1 0 跳出循环
}
return res==temp;
}
}
题目:平方根的近似求法
代码实现:
class Class28{
public static void main(String[] args){
System.out.println(sqrt(16));
}
public static double sqrt(int n){ //定义函数
double nextGuess = 0;
double lastGuess = 1;
while(true){
nextGuess = (lastGuess+n/lastGuess)/2;
if(Math.abs(nextGuess-lastGuess)<0.000001){ //跳出循环的条件
break;
}
lastGuess = nextGuess;
}
return nextGuess;
}
}
题目:检验密码
代码实现:
import java.util.Scanner;
class Class27{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个密码:"); //提示用户输入
String s = scanner.nextLine();
if(isVaild(s)){ //调用函数检测密码,选择输出语句
System.out.println("合法");
}else{
System.out.println("不合法");
}
}
//isVaild函数用于检测密码
public static boolean isVaild(String s){
return isRight1(s)&&isRight2(s)&&isRight3(s); //只有三个密码规则全部符合函数才为真
}
//检测密码长度函数
public static boolean isRight1(String s){
return s.length()>=8;
}
//检测密码内容函数
public static boolean isRight2(String s){
for(int i=0;i<s.length();i++){ //遍历密码
char c=s.charAt(i); //取出字符
if(!isDigit(c)&&!isLetter(c)){ //字符只能为数字或字符
return false;
}
}
return true;
}
//检测字符是否为数字
public static boolean isDigit(char c){
return c>='0'&&c<='9';
}
//检测字符是否为字母
public static boolean isLetter(char c){
return (c>='a'&&c<='z')||(c>='A'&&c<='Z');
}
//检测数字的个数
public static boolean isRight3(String s){
int digitCount=0; //存放数字个数
for(int i =0;i<s.length();i++){ //遍历
char c =s.charAt(i);
if(isDigit(c)){ //调用检测数字函数
digitCount++;
}
}
return digitCount>=2; //数字个数大于2返回真
}
}
题目:消除重复
代码实现:
import java.util.Arrays;
import java.util.Scanner;
class Class30{
/*
消除重复两个方法
步骤:
1、边读边消除
1、定义数组(长度先给0,因为输出重复时,输入数字不放入数组,无法确定要读入多少个数字)
2、提示用户输入
3、for循环读入输入时,判断数组中是否包含这个数字(循环结束条件为i<10)
4、若包含则不读入数组,
5、若不包含则将数组扩容resize函数,同时将扩容的数组尾部加上该数字
6、输出数组内容
2、读完再消除
1、定义数组
2、提示用户输入
3、输入的同时将输入的数组读到数组(for循环读入)
4、定义一个size变量表示数组的有效元素长度
5、遍历数组,如果有重复的将后面的数向前移动一个,size减一
5、打印输出有效元素
*/
public static void main(String[] args){
//边消边读
//version1();
//读完再消
version2();
}
public static void version2(){
int[] arr=new int[10];
Scanner scanner=new Scanner(System.in);
System.out.print("Enter ten number: ");
for(int i=0;i<arr.length;i++){
arr[i]=scanner.nextInt();
}
//消重
int size=arr.length;
for(int i=0;i<size;i++){
for(int j=i+1;j<size;){
if(arr[i]==arr[j]){
for(int k=j+1;k<size;k++){
arr[k-1]=arr[k];
}
size--;
}
j++;
}
}
for(int i=0;i<size;i++){
System.out.print(arr[i]+" ");
}
}
public static void version1(){
Scanner scanner=new Scanner(System.in);
int[] arr=new int[0];
System.out.println("Enter ten number: ");
for(int i=0;i<10;i++){
int number=scanner.nextInt();
if(!isContains(arr,number)){ //不包含时
arr=resize(arr,arr.length+1); //扩容
arr[arr.length-1]=number; //数字放入数组
}
}
System.out.println(Arrays.toString(arr));
}
//扩容函数
public static int[] resize(int[] arr,int newLen){
int[] newArr=new int[newLen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
//判断数组是否包含输入的数字
public static boolean isContains(int[] arr,int key){
for(int i=0;i<arr.length;i++){
if(arr[i]==key){
return true;
}
}
return false;
}
}
题目:是否排好序了?
代码实现:
import java.util.*;
class Class31{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int[] list=new int[10]; //创建数组用于存储输入的数字
System.out.println("Enter list: ");
for(int i=0;i<list.length;i++){ //将读入的数字存入数组
list[i]=scanner.nextInt();
}
if(isSorted(list)){ //根据isSorted函数选择输出语句
System.out.println("The list is already sorted");
}else{
System.out.println("The list is not sorted");
}
}
//判断是否是顺序的函数
public static boolean isSorted(int[] list){
for(int i=0;i<list.length;i++){ //遍历所有数组元素i
for(int j=i+1;j<list.length;j++){ //遍历i之后的所有数组元素
if(list[i]>list[j]){ //判断前后谁大
return false;
}
}
}
return true; //返回函数的值
}
}
题目:四个连续相等的数
代码实现:
import java.util.Scanner;
class Class33{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.println("Enter the number of values: "); //提示用户输入接下来要输入数字的个数
int number=scanner.nextInt();
System.out.println("Enter the valus: "); //提示用户输入数字
int[] arr=new int[number];
for(int i=0;i<arr.length;i++){ //将输入的数字存入数组
arr[i]=scanner.nextInt();
}
if(isConsecutiverFour(arr)){
System.out.println("The list has consecutive fours");
}else{
System.out.println("The list has no consecutive fours");
}
}
//函数isConsecutiverFour用于判断数组中是否有连续相等的四个数
public static boolean isConsecutiverFour(int[] values){
boolean flag=true; //定义一个标志,默认开始数组都是符合要求的
for(int i=0;i<values.length-3;i++){ //遍历从角标0到values.length-3位置的元素
for(int j=i+1;j<i+4;j++){ //遍历元素后三个位置的元素
if(values[i]!=values[j]){ //对比两者,若有不等标志flag为false
flag=false;
}
}
}
return flag; //返回flag的值
}
}
题目:找最小元素的下标
代码实现:
import java.util.Scanner;
class Home30{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("Enter ten number: ");
double[] arr=new double[10]; //创建数组
for(int i=0;i<arr.length;i++){ //用户输入的数读入数组
arr[i]=scanner.nextInt();
}
System.out.println(indexOfSmallestElement(arr)); //用函数indexOfSmallestElement
}
//函数indexOfSmallestElement实现找最小元素下标
public static int indexOfSmallestElement(double[] array){
double min=array[0]; //初始化:最小元素先给数组的第一个位置
int count=0; //记录最小元素的个数
int n=0; //标记,存储最小元素下标
for(int i=0;i<array.length;i++){ //遍历数组
if(array[i]==min){ //若有和min相等的元素count加1
count++;
}
if(array[i]<min){ //若min小于数组元素
min=array[i]; //给min筹重新赋值
count=1; //同时给count赋值为1
n=i; //把角标i给标记n
}
}
if(count>=1){
return n;
}else{
return -1;
}
}
}
题目:完全相同的数组
代码实现:
import java.util.Scanner;
class Home31{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int[] list1=new int[5];
int[] list2=new int[5];
System.out.println("Enter list1: ");
for(int i=0;i<list1.length;i++){
list1[i]=scanner.nextInt(); //读取输入并存入数组list1
}
System.out.println("Enter list2: ");
for(int i=0;i<list2.length;i++){
list2[i]=scanner.nextInt(); //再次读取输入并存入数组list2
}
if(equals(list1,list2)){ //根据函数equals返回的布尔值,选择输出语句
System.out.println("Two lists are strictly identical");
}else{
System.out.println("Two lists are not strictly identical");
}
}
//函数equal用于判断两数组是否是完全相同的
public static boolean equals(int[] list1,int[] list2){
for(int i=0;i<list1.length;i++){ //遍历俩数组元素
if(list1[i]!=list2[i]){ //对比元素
return false; //若不相等函数返回false
}
}
return true; //全部遍历完,返回true
}
}
题目:合并两个有序列表
代码实现:
import java.util.Arrays;
import java.util.Scanner;
class Home32{
/*
麻烦点:读取用户输入,所以开始不知道一个数组长度,第二个数组放入第三个数组时角标不同
解决方案:定义index变量,
不用arr3[i]=arr2[i];
直接用arr3[index++]=arr1[i];
*/
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int[] list1=new int[6];
int[] list2=new int[4];
int[] list3=new int[list1.length+list2.length]; //创建数组list3为list和list2合并后的新数组
int index=0; //定义初始化index变量,作为list3的角标
System.out.println("Enter list1");
for(int i=0;i<list1.length;i++){
list1[i]=scanner.nextInt(); //读入数据存入数组
list3[index++]=list1[i]; //顺便将刚读入list1的数据给list3
}
System.out.println("Enter list2");
for(int j=0;j<list2.length;j++){
list2[j]=scanner.nextInt(); //给list2读入数据
list3[index++]=list2[j]; //将刚读入list2的数据给list3
}
int temp=0; //定义一个变量,方便排序
//双for循环遍历排序
for(int i=0;i<list3.length;i++){
for(int j=i+1;j<list3.length;j++){
if(list3[i]>list3[j]){ //对比前后元素,借用临时变量排序
temp=list3[i];
list3[i]=list3[j];
list3[j]=temp;
}
}
}
System.out.println(Arrays.toString(list3)); //调用Arrays类的toString方法,输出新数组
}
}