算法分享--50道基础算法
来源:互联网 发布:北京知企科技 编辑:程序博客网 时间:2024/06/11 12:33
哈哈,偶然翻到大学业余时间做的50道基础算法题,简单的分享给入门的同学们,大牛不要喷。
----------------------第一题-----------------------------题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? public static void main(String[] args) { System.out.println("请输入月份"); Scanner input = new Scanner(System.in); int num = input.nextInt(); System.out.println("兔子的对数为"+getRabbitNum(num)); } //根据兔子数规律找到递归方法,n代表月份 public static int getRabbitNum(int n) { if (n == 1 || n == 2) { return 1; } else { return getRabbitNum(n - 1) + getRabbitNum(n - 2); } }----------------------第二题-----------------------------判断101-200之间有多少个素数,并输出所有素数。public static void main(String[] args) { int num = 101; int temp = 0; for (int i = 101; i <= 200; i++) { for (int j = 2; j < num; j++) { if(num % j == 0) { temp =1; break; } } if(temp == 1) { temp=0; } else { System.out.println(num); } num++; } }----------------------第三题-----------------------------题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方public static void main(String[] args) { for (int i = 100; i < 1000; i++) { int getNum1 = i/100; int getNum2 = i/10%10; int getNum3 = i%10; if(Math.pow(getNum1, 3)+Math.pow(getNum2, 3)+Math.pow(getNum3, 3)==i) { System.out.println(i); } } }----------------------第四题-----------------------------题目:题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 public static void main(String[] args) { System.out.println("请输入一个你要分解的数"); Scanner input = new Scanner(System.in); int n = input.nextInt(); for (int i = 2; i <=n; i++) { if(i==n) { System.out.println(i); } if(n%i == 0) { n=n/i; System.out.println(i); i =2; //重新赋值i,让程序重新开始循环 } } }----------------------第五题-----------------------------题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 。 public static void main(String[] args) { System.out.println("请输入你的成绩"); Scanner input = new Scanner(System.in); int getScore = input.nextInt(); if(getScore>90) { System.out.println("A"); } else if(getScore>60 && getScore<=89) { System.out.println("B"); } else if(getScore < 60) { System.out.println("C"); } }----------------------第六题---------------------------题目:输入两个正整数m和n,求其最大公约数和最小公倍数。public static void main(String[] args) { System.out.println("请输入两个数:"); Scanner input = new Scanner(System.in); int getNum1 = input.nextInt(); int getNum2 = input.nextInt(); if(getNum1!=0 && getNum2 !=0) { do { if(getNum1>getNum2) { int temp =0; temp = getNum2; getNum2 = getNum1/getNum2; getNum1 = temp; } if(getNum1<getNum2) { int temp =0; temp = getNum1; getNum1 = getNum2/getNum1; getNum2 = temp; } } while(getNum2==0 || getNum1 ==0); System.out.println(getNum1); } }----------------------第七题---------------------------题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个字符串:"); String getStr = input.nextLine(); int Blank = 0,Digit = 0,Letter = 0,Other = 0; for (int i = 0; i < getStr.length(); i++) { char c = getStr.charAt(i); if(c == ' ') { Blank++; } else if(Character.isDigit(c)) { Digit++; } else if(Character.isLetter(c)) { Letter++; } else { Other++; } } System.out.println("此字符串共有"+Blank+"个空格!"); System.out.println("此字符串共有"+Digit+"个数字!"); System.out.println("此字符串共有"+Letter+"个字母!"); System.out.println("其他字符有"+Other+"个"); }----------------------第十题---------------------------题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? public static void main(String[] args) { double x=100; double s =0; for (int i = 0; i < 10; i++) { s = s+x*2; x=x/2; } System.out.println("答:共经过"+(s-100)+"米"); System.out.println("答:反弹的高度为"+x+"米"); }----------------------第十一题---------------------------题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? public static void main(String[] args) { int s[] ={1,2,3,4}; int num1 = 0,num2 =0,num3 =0; for (int i = 0; i < s.length; i++) { num1 =s[i]; for (int j = 0; j < s.length; j++) { num2 = s[j]; if(num2==num1) { continue; } for (int j2 = 0; j2 < s.length; j2++) { num3 = s[j2]; if(num3==num1) { continue; } if(num3==num2) { continue; } System.out.print(num1); System.out.print(num2); System.out.print(num3); System.out.println(); } } } }----------------------第十二题---------------------------题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数? public static void main(String[] args) { long i; double bonus,bon1,bon2,bon3,bon4,bon5; bon1 = 100000*0.1; bon2=bon1+100000*0.075; bon3=bon2+200000*0.05; bon4=bon3+200000*0.03; bon5=bon4+400000*0.015; System.out.println("请输入利润i:"); Scanner input = new Scanner(System.in); i=input.nextLong(); if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bon1+(i-100000)*0.075; else if(i<=400000) bonus=bon2+(i-200000)*0.05; else if(i<=600000) bonus=bon3+(i-400000)*0.03; else if(i<=1000000) bonus=bon4+(i-600000)*0.015; else bonus=bon5+(i-1000000)*0.01; System.out.println("奖金是"+bonus); }----------------------第十三题---------------------------题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? for(int i=1;i<100000;i++) { //判断开平方根出来的数小数部分是否为0, if(Math.sqrt((i+100))%1==0 && Math.sqrt((i+100+168))%1==0) { System.out.println(i); } }----------------------第十四题---------------------------题目:输入某年某月某日,判断这一天是这一年的第几天? public static void main(String[] args) { int y,m,d; int sum=0; int feb=28; Scanner in = new Scanner(System.in); System.out.print("请输入年份:"); y = in.nextInt(); System.out.print("请输入月份:"); m = in.nextInt(); System.out.print("请输入几号:"); d = in.nextInt(); if((y%4==0 && y%100!=0) || y%400==0) { feb = 29; } switch(m) { case 1: sum = d; break; case 2: sum = 31 + d; break; case 3: sum = 31+feb+d; break; case 4: sum = 31+feb+31+d; break; case 5: sum = 31+feb+31+30+d; break; case 6: sum = 31+feb+31+30+31+d; break; case 7: sum = 31+feb+31+30+31+30+d; break; case 8: sum = 31+feb+31+30+31+30+31+d; break; case 9: sum = 31+feb+31+30+31+30+31+31+d; break; case 10: sum = 31+feb+31+30+31+30+31+31+30+d; break; case 11: sum = 31+feb+31+30+31+30+31+31+30+31+d; break; case 12: sum = 31+feb+31+30+31+30+31+31+30+31+30+d; } System.out.println(y+" 年 "+m+" 月 " + d + "号是今年的第"+sum+"天"); }----------------------第十五题---------------------------题目:输入三个整数x,y,z,请把这三个数由小到大输出。public static void main(String[] args) { int getNum[] = new int[3]; Scanner input = new Scanner(System.in); for (int i = 0; i < 3; i++) { System.out.println("请输入第"+(i+1)+"个数"); getNum[i]= input.nextInt(); } for (int i = 0; i < getNum.length; i++) { for (int j = i+1; j < getNum.length; j++) { if(getNum[i]>getNum[j]) { int temp; temp =getNum[i]; getNum[i] = getNum[j]; getNum[j] = temp; } } } System.out.print("x,y,z:由小到大排列为:"); for (int i = 0; i < getNum.length; i++) { System.out.print(getNum[i]+" "); } }----------------------第十六题---------------------------题目:输出9*9口诀。 public static void main(String[] args) { for (int i = 1; i <10; i++) { for (int j = i; j <10; j++) { System.out.print(i+"*"+j+"="+i*j+" "); } System.out.println(""); } }----------------------第十七题---------------------------题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 public static void main(String[] args) { int n = 1; for (int i = 1; i <= 10; i++) { n = n*2+1; } System.out.println(n); }----------------------第十八题---------------------------题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。public static void main(String[] args) { String[] temp1 = {"a","b","c"}; String[] temp2 = {"x","y","z"}; for (int i = 0; i < temp1.length; i++) { for (int j = 0; j < temp2.length; j++) { if(i==0 && j ==0) { continue; } else if((i==2&&j==0)||(i==2&&j==2)) { continue; } else { System.out.println( temp1[i] + " " + temp2[j]); } } } }----------------------第十九题---------------------------题目:打印出如下图案(菱形) * *** ***** ******* ***** *** * public static void main(String[] args) { for (int i = 0; i < 4; i++) { for (int j = 4; j > i+1; j--) { System.out.print(" "); } for (int j = 0; j < 2*i +1; j++) { System.out.print("*"); } System.out.println(""); } for (int i = 0; i < 3; i++) { for (int j = i+1; j > 0; j--) { System.out.print(" "); } for (int j = 5-(i*2); j > 0; j--) { System.out.print("*"); } System.out.println(""); } }----------------------第二十题---------------------------题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。public static void main(String[] args) { double sum = 0; // 和的变量 double a = 1.0; // 分母 double b = 2.0; // 分子 for (int i = 1; i <= 20; i++) { sum = sum + b/a; double c = a; b = a+b; a = c; } System.out.println(sum); }----------------------第二十一题---------------------------题目:求1+2!+3!+...+20!的和 public static void main(String[] args) { int sub = 0; //和的变量 for(int i = 1; i <=20; i++) { int multiplySub =1; // 定义每个数的累乘 for (int j = i; j >=1; j--) { multiplySub = multiplySub * j; //每个数的累乘的结果 } sub = multiplySub + sub; //所有数累乘后相加的结果 } System.out.println(sub); }----------------------第二十二题---------------------------题目:利用递归方法求5!public static void main(String[] args) { int x = 5; int result = Sub(x); System.out.println("" + x + "! = " + result); } public static int Sub(int x) { /*阶乘算法*/ if (x > 1) return (x * Sub(x - 1)); /*递归*/ else return 1; }----------------------第二十三题---------------------------题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?public static void main(String[] args) { int yearold = 10; for (int i = 1; i < 5; i++) { yearold = yearold +2; } System.out.println("第五个人的年龄是:"+yearold); } ----------------------第二十四题--------------------------- 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 public static void main(String[] args) { char solvgetNum[] = new char [5]; System.out.println("请输入一个不多于5位的正整数:"); Scanner input = new Scanner(System.in); String getNum = input.next(); System.out.println(getNum.length()); for (int i = 0; i < getNum.length(); i++) { solvgetNum[i] = getNum.charAt(i); } for (int i = getNum.length()-1; i >= 0; i--) { System.out.println(solvgetNum[i]); } } ----------------------第二十五题--------------------------- 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。public static void main(String args[]) { int[] GetNum = new int[5]; Scanner input =new Scanner(System.in); int num = input.nextInt(); //万位 GetNum[0] = num/10000; //千位 GetNum[1] = (num-GetNum[0]*10000)/1000; //百位 GetNum[2] = (num-GetNum[0]*10000-GetNum[1]*1000)/100; //十位 GetNum[3] = (num-GetNum[0]*10000-GetNum[1]*1000-GetNum[2]*100)/10; //个位 GetNum[4] = (num-GetNum[0]*10000-GetNum[1]*1000-GetNum[2]*100-GetNum[3]*10)/1; if(GetNum[0]+2==GetNum[1]+1&&GetNum[2]==GetNum[1]+1&&GetNum[2]==(GetNum[3]+1)&&(GetNum[3]+1)==(GetNum[4]+2)) { System.out.println("是回文数"); } else { System.out.println("不是回文数"); } } ----------------------第二十六题--------------------------- 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。public static void main(String args[]) { System.out.println("请输入星期几的字母"); Scanner input = new Scanner(System.in); String getDay = input.next(); char getDayFirst1 = getDay.charAt(0); switch (getDayFirst1) { case 'y': System.out.println("今天是星期一"); break; case 'e': System.out.println("今天是星期二"); break; case 's': char getDayFirst2 = getDay.charAt(1); if(getDayFirst2 == 'a') { System.out.println("今天是星期三"); } else if(getDayFirst2 == 'i') { System.out.println("今天是星期四"); } else { System.out.println("你的输入有误"); } break; case 'w': System.out.println("今天是星期五"); break; case 'l': System.out.println("今天是星期六"); break; case 't': System.out.println("今天是星期天"); break; default: System.out.println("你的输入有误"); break; } }----------------------第二十七题--------------------------- 题目:求100之内的素数public static void main(String[] args) { int num = 1; int temp = 0; for (int i = 101; i <= 200; i++) { for (int j = 2; j < num; j++) { if(num % j == 0) { temp =1; break; } } if(temp == 1) { temp=0; } else { System.out.println(num); } num++; } } ----------------------第二十八题--------------------------- 题目:对10个数进行排序 public static void main(String[] args) { Scanner input = new Scanner(System.in); int s[] = new int[10]; for (int i = 0; i < s.length; i++) { System.out.println("请输入第"+(i+1)+"个数"); s[i] = input.nextInt(); } for (int i = 0; i < s.length; i++) { for (int j = i+1; j < s.length; j++) { if(s[i]>s[j]) { int temp; temp = s[i]; s[i] = s[j]; s[j] = temp; } } } for (int i = 0; i < s.length; i++) { System.out.println(s[i]); } }----------------------第三十一题--------------------------- 题目:对10个数进行排序public static void main(String[] args) { int s[] = {1,2,3,4,5,6,7,8,9,10}; for (int i= s.length-1; i >=0; i--) { System.out.println(s[i]); } }----------------------第三十三题--------------------------- 题目:打印出杨辉三角形(要求打印出10行如下图) public static void main(String[] args) { int i,j; int a[][] = new int[10][10]; for(i=0;i<10;i++) { a[i][i]=1; a[i][0]=1; } for(i=2;i<10;i++) { for(j=1;j<=i-1;j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<10;i++) { for (int k = i; k < 10; k++) { System.out.print(" "); } for(j=0;j<=i;j++) { System.out.print(a[i][j]+" "); } System.out.println(); } }----------------------第三十四题--------------------------- 题目:输入3个数a,b,c,按大小顺序输出。public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(); int b = input.nextInt(); int c = input.nextInt(); if(a>b) { int temp = b; b = a; a = temp; } if(a>c) { int temp = a; a = c; c = temp; } if(b>c) { int temp = b; b = c; c = temp; } System.out.print(a+" "); System.out.print(b+" "); System.out.print(c+" " ); }----------------------第三十五题--------------------------- 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 public static void main(String args[]) { //定义一个数组 int[] num4 = new int[5]; //从键盘输入5个数 Scanner input = new Scanner(System.in); System.out.println("请输入5个数"); for (int i = 0; i < num4.length; i++) { num4[i] = input.nextInt(); } //求出这5个数的最大值和最小值 int max = num4[0]; int min = num4[0]; for (int i = 0;i < num4.length; i++) { if (num4[i] > max) { max = num4[i]; } if (num4[i] < min) { min = num4[i]; } } //如果数组中哪个数等于最大值(最小值),这个数就和第一个(最后一个)元素换位子 for (int i = 0; i < num4.length; i++) { if(num4[i] == max) { int temp1; temp1 = num4[i]; num4[i] = num4[0]; num4[0] = temp1; } if (num4[i] == min) { int temp2; temp2 = num4[i]; num4[i] = num4[4]; num4[4] = temp2; } } //输出交换后的数 System.out.println("交换后"); for (int i = 0; i < num4.length; i++) { System.out.println(num4[i]); } }----------------------第三十八题--------------------------- 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。public static void main(String[] args) { Scanner input = new Scanner(System.in); String str= input.next(); System.out.println(str.length()); }----------------------第三十九题--------------------------- 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/npublic static void main(String[] args) { Scanner input = new Scanner(System.in); int n= input.nextInt(); double result = 0; if(n%2==0) { for (double i = 2; i <= n; i=i+2) { result = result +1/i; } } else if(n%2==1) { for (double i = 1; i <= n; i=i+2) { result = result +1/i; } } System.out.println(result); }----------------------第四十题--------------------------- 题目:字符串排序。public static void main(String[] args) { String str[] = new String[5]; Scanner input = new Scanner(System.in); for (int i = 0; i < str.length; i++) { System.out.println("请输入第"+(i+1)+"个字符串"); str[i] = input.next(); } Arrays.sort(str); for (int i = 0; i < str.length; i++) { System.out.println(str[i]+" "); } }----------------------第四十一题--------------------------- 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? public static void main(String[] args) { int i = 4, m, j=0, count; while(true) { count = 0; m = i; for(int k=0;k<5;k++) { j = m/4*5+1; //i代表下一个猴子能够看到的数,j 代表当前猴子能够看到的数 m = j; if(j % 4 == 0) count++; else break; } if(count == 4) { System.out.println("一开始个数为:"+j); break; } i += 4; } }----------------------第四十三题--------------------------- 题目:求0—7所能组成的奇数个数。 //组成1位数是4个。//组成2位数是7*4个。//组成3位数是7*8*4个。//组成4位数是7*8*8*4个。//......public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入你要求奇数的位数"); int n = input.nextInt(); if(n == 1) { System.out.println(4); } else if(n == 2) { System.out.println(4*7); } else { System.out.println(4*7*Math.pow(2,3*(n-2))); } }----------------------第四十六题--------------------------- 题目:两个字符串连接程序 public static void main(String[] args) { String a = "adasdasdasdas"; String b = "fsdfdsfdsfdsfds"; String c = a+b; System.out.println(c); }----------------------第四十八题--------------------------- 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入 一个四位数:"); char c[] = new char[4]; String str = input.next(); for (int i = 0; i < c.length; i++) { c[i] = str.charAt(i); System.out.println(c[i]); } int newstr[] = new int[4]; for (int i = 0; i < newstr.length; i++) { newstr[i] = (c[i]+5)%10; } int temp; temp = newstr[0]; newstr[0] = newstr[3]; newstr[3] = temp; int temp1; temp1 = newstr[1]; newstr[1] = newstr[2]; newstr[2] = temp1; for (int i = 0; i < newstr.length; i++) { System.out.print(newstr[i]); } }----------------------第四十九题--------------------------- 题目:计算字符串中子串出现的次数 public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个字符串:"); String getStr = input.nextLine(); int Blank = 0,Digit = 0,Letter = 0,Other = 0; for (int i = 0; i < getStr.length(); i++) { char c = getStr.charAt(i); if(c == ' ') { Blank++; } else if(Character.isDigit(c)) { Digit++;u v } else if(Character.isLetter(c)) { Letter++; } else { Other++; } } System.out.println("此字符串共有"+Blank+"个空格!"); System.out.println("此字符串共有"+Digit+"个数字!"); System.out.println("此字符串共有"+Letter+"个字母!"); System.out.println("其他字符有"+Other+"个"); }----------------------第五十题--------------------------- 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数存放在磁盘文件 "stud "中。public static void main(String[] args) { String stud[][] = new String[5][3]; Scanner input = new Scanner(System.in); for (int i = 0; i < stud.length; i++) { System.out.print("请输入第"+(i+1)+"个同学的名字:"); String name = input.next(); for (int j = 0; j < 3; j++) { System.out.print("请输入"+name+"同学的第"+(j+1)+"门课的成绩:"); stud[i][j] = input.next(); } } for (int i = 0; i < stud.length; i++) { double avg = 0; for (int j = 0; j < 3; j++) { System.out.print(stud[i][j]+" "); avg= avg + Integer.parseInt(stud[i][j]); } System.out.print(avg/3); System.out.println(""); } }
2 0
- 算法分享--50道基础算法
- java算法:算法基础
- 基础算法--递归算法
- 【算法基础】----贪心算法
- 算法_5:算法基础
- 算法-算法基础
- 算法--基础算法问题
- 【基础算法】算法总结
- 算法基础
- 算法基础
- 算法基础
- 基础算法
- 算法基础
- 基础算法
- 基础算法-
- 基础算法
- 算法基础
- 算法基础
- oracle 查询死锁
- json数据取法
- Freemarker自定义指令
- 虚拟机安装archlinux的简单步骤
- TNS-12535: TNS:operation timed out TNS-00505: Operation timed out
- 算法分享--50道基础算法
- github添加 ssh-key
- 自执行匿名函数剖析
- matlab练习程序(寻找凸包,Graham扫描法)
- Mysql "data too long for column"
- vs怎么支持css3.0
- Storm入门指南第一章 基础知识
- js给li标签中的所有a标签加点击事件
- Android 代码编写习惯