算法分享--50道基础算法
哈哈,偶然翻到大学业余时间做的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(getNum1int 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("");}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
