概述
package com.aowin.test;
import java.util.Random;
import java.util.TreeSet;
import java.util.*;
public class Test {
public static void main(String[] args) {
//System.out.println(rabbit(7));
//letter();
//test3();
//test4(19);
//System.out.println(test5(16,19));
//test6();
//System.out.println(test7(2,4));
//System.out.println(test9(10));
//test10();
//test11();
//test12();
//System.out.println(test13(9));
//test14(10);
//test18(4);
//yang(10);
test20();
}
//1、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
public static int rabbit(int n){
if(n==1||n==2){
return 1;
}else{
return rabbit(n-1)+rabbit(n-2);
}
}
//2、随机产生20个不重复的小写字母并且排序?
public static void letter(){
Random rand = new Random();
TreeSet<Character> ts = new TreeSet<Character>();
while(ts.size()<20){
int n = rand.nextInt(26); //产生0~25中间的一个随机数
char ch = (char)(n+97); //转换成a~z之间的一个字母
ts.add(ch);
}
System.out.println(ts);
}
//3.判断101-200之间有多少个素数,并输出所有素数。
public static void test3(){
int count =0;
for(int i=101;i<=200;i++){
if(isPrime(i)){
System.out.println(i+"是素数");
count++;
}
}
System.out.println("共有"+count+"个");
}
private static boolean isPrime(int x) {
boolean flag = true; //true表示是素数
for(int k=2;k<x;k++){
if(x%k==0){
flag=false;
break;
}
}
return flag;
}
//4.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
public static void test4(int x){
int k=2;
while(true){
if(x%k==0){
System.out.println(k);
x = x/k;
k=2;
}else{
k++;
}
if(x==1)
break;
}
}
//5.输入两个正整数x和y,求其最大公约数.
public static int test5(int x,int y){
int m = x>y?x:y; //x,y中较大的数
int n = x<y?x:y; //x,y中较小的数
while(true){
if(n==0){
return m;
}else{
int tmp = m%n;
m=n;
n=tmp;
}
}
}
//6输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数.
public static void test6( ){
Scanner scan = new Scanner(System.in);
System.out.println("请输入任意的字符:");
String str = scan.nextLine();
int count_en=0;
int count_space = 0;
int count_digit = 0;
int count_other = 0;
for(int i =0;i<str.length();i++){
char ch = str.charAt(i);
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'){
count_en++;
}else if(ch>='0'&&ch<='9'){
count_digit++;
}else if(ch==32){
count_space++;
}else{
count_other++;
}
}
System.out.println("英文字母:"+count_en);
System.out.println("空格:"+count_space);
System.out.println("数字:"+count_digit);
System.out.println("其它:"+count_other);
}
//7求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制.
public static int test7(int a, int n){
int sum=0;
int x=0;
for(int i=0;i<n;i++){
x=x*10+a;
sum+=x;
}
return sum;
}
//8一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程找出1000以内的所有完数
//9、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
public static double test9(int n){
if(n==1){
return 50.0;
}else{
return test9(n-1)/2; //第n次反弹的高度
}
}
//10、有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
public static void test10(){
int count=0;
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
if(j==i)
continue;
for(int k=1;k<=4;k++){
if(k==i||k==j)
continue;
int a=100*i;
a+=j*10;
a+=k;
System.out.println(a);
count++;
}
}
}
System.out.println("共有:"+count);
}
//11、在1-1000内有一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
public static void test11(){
for(int i=1;i<=1000;i++){
if(Math.sqrt(100+i)%1==0&&Math.sqrt(100+i+168)%1==0)
System.out.println(i);
}
}
//12、输入某年某月某日,判断这一天是这一年的第几天?
public static void test12(){
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();
System.out.println("请输入日:");
int day = scan.nextInt();
if(month==1){
System.out.println("第"+day+"天");
}else{
int sum=0;
for(int i=1;i<month;i++){
switch(i){
case 1:
sum+=31;
break;
case 2:
sum+=isLeapYear(year)?29:28;
break;
case 3:
sum+=31;
break;
case 4:
sum+=30;
break;
case 5:
sum+=31;
break;
case 6:
sum+=30;
break;
case 7:
sum+=31;
break;
case 8:
sum+=31;
break;
case 9:
sum+=30;
break;
case 10:
sum+=31;
break;
case 11:
sum+=30;
break;
case 12:
sum+=31;
break;
}
}
System.out.println("第"+(sum+day)+"天");
}
}
private static boolean isLeapYear(int year) {
if(year%4==0&&year%100!=0||year%400==0)
return true;
return false;
}
//13猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
public static int test13(int n){
if(n==10){
return 1;
}else
{
return (test13(n+1)+1)*2;
}
}
//14打印图形
public static void test14(int n){
//打印行数
int line = 2*n-1;
for(int k=0;k<line;k++){
//*的数目
int num=0;
if(k<n)
num = 2*k+1;
else
num = 2*(n-1)+1-2*(k-(n-1));
//空格的数目
int num2=0;
if(k<n)
num2 = n-k-1;
else
num2 = k-n+1;
for(int m=0;m<num2;m++){
System.out.print(" ");
}
for(int m=0;m<num;m++){
System.out.print("*");
}
System.out.println();
}
}
//18.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
public static void test18(int x){
int[] arr = {3,5,7,11};
int[] brr = new int[arr.length+1];
System.arraycopy(arr, 0, brr, 0, arr.length);
for(int i=0;i<arr.length;i++){
if(x<brr[i]){
int tmp = brr[i];
brr[i] = x;
x = tmp;
}
}
brr[arr.length]=x;
for(int i:brr){
System.out.print(i+",");
}
}
//19打印出杨辉三角形
public static void yang(int n){
int[] arr = {1};
space(n);
print(arr);
int count=1;
while(count<n){
int[] brr = new int[arr.length+1];
for(int i=0;i<brr.length;i++){
if(i==0){
brr[i]=arr[0];
}else if(i==brr.length-1){
brr[i]=arr[arr.length-1];
}else{
brr[i]=arr[i-1]+arr[i];
}
}
space(n-count);
print(brr);
count++;
arr=brr;
}
}
private static void space(int n) {
for(int i=0;i<n;i++){
System.out.print(" ");
}
}
private static void print(int[] arr) {
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
}
//20输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组.
public static void test20(){
int[] arr= {30, 86, 33, 56, 57, 82, 36, 84};
print(arr);
int max = arr[1];
int ind = 1;
for(int i=2;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
ind = i;
}
}
if(max>arr[0]){
arr[ind]=arr[0];
arr[0]=max;
}
int min=arr[1];
int ind1 = 1;
for(int i=2;i<arr.length-1;i++){
if(arr[i]<min){
min = arr[i];
ind1 = i;
}
}
if(min<arr[arr.length-1]){
arr[ind1] = arr[arr.length-1];
arr[arr.length-1]=min;
}
print(arr);
}
}
************求两个整数的最大公约数和最小公倍数**********
public class Work4 {
public static void main(String[] args) {
Random rand = new Random();
int a = rand.nextInt(100)+1;
int b = rand.nextInt(100)+1;
int m = a<b?a:b;
int n = a>b?a:b;
int x;
for(x = m;x>=1;x--){
if(m%x==0&&n%x==0){
System.out.println(x+"是"+m+"和"+n+"的最大公约数");
break;
}
}
System.out.println(m*n/x);
}
}
//5.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13......求出这个数列的前20项的和
public class Work5 {
public static void main(String[] args) {
double a=2;
double b=1;
double sum = a/b;
for(int i=1;i<=19;i++){
double tmp=a;
a=a+b;
b=tmp;
sum+=a/b;
}
System.out.println("sum="+sum);
}
}
6.一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程找出1000以内的所有完数
public class Work6 {
public static void main(String[] args) {
for(int i=1;i<=1000;i++){
//找出i的因子
int sum=0;
for(int j=1;j<i;j++){
if(i%j==0){
sum+=j; //因子累加
}
}
//判断是否完数(所有因子之后与该数相等)
if(sum==i){
System.out.println(i+"是完数");
}
}
}
}
***********************************************
public class Test2 {
public static void main(String[] args) {
//System.out.println(compare("hello","hell"));
String[] arr = new String[]{"abc","hans","lisi","hello"};
//sortBubble(arr);
/*sortSelect(arr);
for(String s:arr)
System.out.println(s); */
System.out.println(test24());
}
//24海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
//第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
//第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
public static int test24(){
int num=1; //num:编号为i的猴子拿走的那一份桃子的数量
int n=num;
int i=5; //i:猴子的编号
int a=0; //a:原来沙滩上桃子的数量
while(true){
a = n*5+1; //编号为i的猴子拿到的桃子总数,来源于编号i-1的猴子剩余的4份桃子
if(i==1)
break;
if(a%4==0){
i--;
n = a/4;
}else{
num++;
i=5;
n=num;
System.out.println("num="+num);
}
}
return a;
}
//23,字符串排序
//冒泡排序
public static void sortBubble(String[] arr){
for(int i=arr.length-1;i>0;i--){
for(int k=0;k<i;k++){
if(!compare(arr[k],arr[k+1])){
String tmp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = tmp;
}
}
}
}
//选择排序
public static void sortSelect(String[] arr){
for(int i=0;i<arr.length-1;i++){
int ind = i+1;
for(int k=i+2;k<arr.length;k++){
if(compare(arr[k],arr[ind])){
ind = k;
}
}
if(compare(arr[ind],arr[i])){
String tmp = arr[i];
arr[i] = arr[ind];
arr[ind] = tmp;
}
}
}
//插入排序
//两个字符串比较大小 hello hell
public static boolean compare(String s1,String s2){
boolean flag = true; //true:表示s1<s2
int m=s1.length();
int n = s2.length();
int num = m<n?m:n;
int i=0;
while(i<num){
if(s1.charAt(i)-s2.charAt(i)>0){
flag=false;
return flag;
}else if(s1.charAt(i)-s2.charAt(i)<0){
return flag;
}
i++;
}
if(i==num){
if(m>n)
flag=false;
}
return flag;
}
}
最后
以上就是动人音响为你收集整理的【java】常见的简单算法的全部内容,希望文章能够帮你解决【java】常见的简单算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复