`
mylftnt
  • 浏览: 28414 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

JAVA经典算法40题

 
阅读更多
  1. 【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
  2. 1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
  3. publicclassexp2{
  4. publicstaticvoidmain(Stringargs[]){
  5. inti=0;
  6. for(i=1;i<=20;i++)
  7. System.out.println(f(i));
  8. }
  9. publicstaticintf(intx)
  10. {
  11. if(x==1||x==2)
  12. return1;
  13. else
  14. returnf(x-1)+f(x-2);
  15. }
  16. }
  17. publicclassexp2{
  18. publicstaticvoidmain(Stringargs[]){
  19. inti=0;
  20. mathmymath=newmath();
  21. for(i=1;i<=20;i++)
  22. System.out.println(mymath.f(i));
  23. }
  24. }
  25. classmath
  26. {
  27. publicintf(intx)
  28. {
  29. if(x==1||x==2)
  30. return1;
  31. else
  32. returnf(x-1)+f(x-2);
  33. }
  34. }
  35. 【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
  36. 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
  37. 则表明此数不是素数,反之是素数。
  38. publicclassexp2{
  39. publicstaticvoidmain(Stringargs[]){
  40. inti=0;
  41. mathmymath=newmath();
  42. for(i=2;i<=200;i++)
  43. if(mymath.iszhishu(i)==true)
  44. System.out.println(i);
  45. }
  46. }
  47. classmath
  48. {
  49. publicintf(intx)
  50. {
  51. if(x==1||x==2)
  52. return1;
  53. else
  54. returnf(x-1)+f(x-2);
  55. }
  56. publicbooleaniszhishu(intx)
  57. {
  58. for(inti=2;i<=x/2;i++)
  59. if(x%2==0)
  60. returnfalse;
  61. returntrue;
  62. }
  63. }
  64. 【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
  65. 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
  66. publicclassexp2{
  67. publicstaticvoidmain(Stringargs[]){
  68. inti=0;
  69. mathmymath=newmath();
  70. for(i=100;i<=999;i++)
  71. if(mymath.shuixianhua(i)==true)
  72. System.out.println(i);
  73. }
  74. }
  75. classmath
  76. {
  77. publicintf(intx)
  78. {
  79. if(x==1||x==2)
  80. return1;
  81. else
  82. returnf(x-1)+f(x-2);
  83. }
  84. publicbooleaniszhishu(intx)
  85. {
  86. for(inti=2;i<=x/2;i++)
  87. if(x%2==0)
  88. returnfalse;
  89. returntrue;
  90. }
  91. publicbooleanshuixianhua(intx)
  92. {
  93. inti=0,j=0,k=0;
  94. i=x/100;
  95. j=(x%100)/10;
  96. k=x%10;
  97. if(x==i*i*i+j*j*j+k*k*k)
  98. returntrue;
  99. else
  100. returnfalse;
  101. }
  102. }
  103. 【程序4】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
  104. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
  105. (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
  106. (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。
  107. (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
  108. publicclassexp2{
  109. publicexp2(){}
  110. publicvoidfengjie(intn){
  111. for(inti=2;i<=n/2;i++){
  112. if(n%i==0){
  113. System.out.print(i+"*");
  114. fengjie(n/i);
  115. }
  116. }
  117. System.out.print(n);
  118. System.exit(0);///不能少这句,否则结果会出错
  119. }
  120. publicstaticvoidmain(String[]args){
  121. Stringstr="";
  122. exp2c=newexp2();
  123. str=javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):");
  124. intN;
  125. N=0;
  126. try{
  127. N=Integer.parseInt(str);
  128. }catch(NumberFormatExceptione){
  129. e.printStackTrace();
  130. }
  131. System.out.print(N+"分解质因数:"+N+"=");
  132. c.fengjie(N);
  133. }
  134. }
  135. 【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
  136. 1.程序分析:(a>b)?a:b这是条件运算符的基本例子。
  137. importjavax.swing.*;
  138. publicclassex5{
  139. publicstaticvoidmain(String[]args){
  140. Stringstr="";
  141. str=JOptionPane.showInputDialog("请输入N的值(输入exit退出):");
  142. intN;
  143. N=0;
  144. try{
  145. N=Integer.parseInt(str);
  146. }
  147. catch(NumberFormatExceptione){
  148. e.printStackTrace();
  149. }
  150. str=(N>90?"A":(N>60?"B":"C"));
  151. System.out.println(str);
  152. }
  153. }
  154. 【程序6】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
  155. 1.程序分析:利用辗除法。
  156. 最大公约数:
  157. publicclassCommonDivisor{
  158. publicstaticvoidmain(Stringargs[])
  159. {
  160. commonDivisor(24,32);
  161. }
  162. staticintcommonDivisor(intM,intN)
  163. {
  164. if(N<0||M<0)
  165. {
  166. System.out.println("ERROR!");
  167. return-1;
  168. }
  169. if(N==0)
  170. {
  171. System.out.println("thebiggestcommondivisoris:"+M);
  172. returnM;
  173. }
  174. returncommonDivisor(N,M%N);
  175. }
  176. }
  177. 最小公倍数和最大公约数:
  178. importjava.util.Scanner;
  179. publicclassCandC
  180. {
  181. //下面的方法是求出最大公约数
  182. publicstaticintgcd(intm,intn)
  183. {
  184. while(true)
  185. {
  186. if((m=m%n)==0)
  187. returnn;
  188. if((n=n%m)==0)
  189. returnm;
  190. }
  191. }
  192. publicstaticvoidmain(Stringargs[])throwsException
  193. {
  194. //取得输入值
  195. //Scannerchin=newScanner(System.in);
  196. //inta=chin.nextInt(),b=chin.nextInt();
  197. inta=23;intb=32;
  198. intc=gcd(a,b);
  199. System.out.println("最小公倍数:"+a*b/c+"\n最大公约数:"+c);
  200. }
  201. }
  202. 【程序7】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  203. 1.程序分析:利用while语句,条件为输入的字符不为'\n'.
  204. importjava.util.Scanner;
  205. publicclassex7{
  206. publicstaticvoidmain(Stringargs[])
  207. {
  208. System.out.println("请输入字符串:");
  209. Scannerscan=newScanner(System.in);
  210. Stringstr=scan.next();
  211. StringE1="[\u4e00-\u9fa5]";
  212. StringE2="[a-zA-Z]";
  213. intcountH=0;
  214. intcountE=0;
  215. char[]arrChar=str.toCharArray();
  216. String[]arrStr=newString[arrChar.length];
  217. for(inti=0;i<arrChar.length;i++)
  218. {
  219. arrStr[i]=String.valueOf(arrChar[i]);
  220. }
  221. for(Stringi:arrStr)
  222. {
  223. if(i.matches(E1))
  224. {
  225. countH++;
  226. }
  227. if(i.matches(E2))
  228. {
  229. countE++;
  230. }
  231. }
  232. System.out.println("汉字的个数"+countH);
  233. System.out.println("字母的个数"+countE);
  234. }
  235. }
  236. 【程序8】题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
  237. 1.程序分析:关键是计算出每一项的值。
  238. importjava.io.*;
  239. publicclassSumloop{
  240. publicstaticvoidmain(String[]args)throwsIOException
  241. {
  242. ints=0;
  243. Stringoutput="";
  244. BufferedReaderstadin=newBufferedReader(newInputStreamReader(System.in));
  245. System.out.println("请输入a的值");
  246. Stringinput=stadin.readLine();
  247. for(inti=1;i<=Integer.parseInt(input);i++)
  248. {
  249. output+=input;
  250. inta=Integer.parseInt(output);
  251. s+=a;
  252. }
  253. System.out.println(s);
  254. }
  255. }
  256. 另解:
  257. importjava.io.*;
  258. publicclassSumloop{
  259. publicstaticvoidmain(String[]args)throwsIOException
  260. {
  261. ints=0;
  262. intn;
  263. intt=0;
  264. BufferedReaderstadin=newBufferedReader(newInputStreamReader(System.in));
  265. Stringinput=stadin.readLine();
  266. n=Integer.parseInt(input);
  267. for(inti=1;i<=n;i++){
  268. t=t*10+n;
  269. s=s+t;
  270. System.out.println(t);
  271. }
  272. System.out.println(s);
  273. }
  274. }
  275. 【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=123.编程找出1000以内的所有完数。
  276. publicclassWanshu{
  277. publicstaticvoidmain(String[]args)
  278. {
  279. ints;
  280. for(inti=1;i<=1000;i++)
  281. {
  282. s=0;
  283. for(intj=1;j<i;j++)
  284. if(i%j==0)
  285. s=s+j;
  286. if(s==i)
  287. System.out.print(i+"");
  288. }
  289. System.out.println();
  290. }
  291. }
  292. 【程序10】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  293. publicclassEx10{
  294. publicstaticvoidmain(String[]args)
  295. {
  296. doubles=0;
  297. doublet=100;
  298. for(inti=1;i<=10;i++)
  299. {
  300. s+=t;
  301. t=t/2;
  302. }
  303. System.out.println(s);
  304. System.out.println(t);
  305. }
  306. }
Java代码 收藏代码
  1. 【程序11】题目:有1234个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  2. 1.程序分析:可填在百位、十位、个位的数字都是1234。组成所有的排列后再去掉不满足条件的排列。
  3. publicclassWanshu{
  4. publicstaticvoidmain(String[]args)
  5. {
  6. inti=0;
  7. intj=0;
  8. intk=0;
  9. intt=0;
  10. for(i=1;i<=4;i++)
  11. for(j=1;j<=4;j++)
  12. for(k=1;k<=4;k++)
  13. if(i!=j&&j!=k&&i!=k)
  14. {t+=1;
  15. System.out.println(i*100+j*10+k);
  16. }
  17. System.out.println(t);
  18. }
  19. }
  20. 【程序12】题目:企业发放的奖金根据利润提成。利润(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%提成,从键盘输入当月利润I,求应发放奖金总数?
  21. 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
  22. importjava.util.*;
  23. publicclasstest{
  24. publicstaticvoidmain(String[]args){
  25. doublesum;//声明要储存的变量应发的奖金
  26. Scannerinput=newScanner(System.in);//导入扫描器
  27. System.out.print("输入当月利润");
  28. doublelirun=input.nextDouble();//从控制台录入利润
  29. if(lirun<=100000){
  30. sum=lirun*0.1;
  31. }elseif(lirun<=200000){
  32. sum=10000+lirun*0.075;
  33. }elseif(lirun<=400000){
  34. sum=17500+lirun*0.05;
  35. }elseif(lirun<=600000){
  36. sum=lirun*0.03;
  37. }elseif(lirun<=1000000){
  38. sum=lirun*0.015;
  39. }else{
  40. sum=lirun*0.01;
  41. }
  42. System.out.println("应发的奖金是"+sum);
  43. }
  44. }
  45. 后面其他情况的代码可以由读者自行完善.
  46. 【程序13
  47. 题目:一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?
  48. 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:
  49. publicclasstest{
  50. publicstaticvoidmain(String[]args){
  51. longk=0;
  52. for(k=1;k<=100000l;k++)
  53. if(Math.floor(Math.sqrt(k+100))==Math.sqrt(k+100)&&Math.floor(Math.sqrt(k+168))==Math.sqrt(k+168))
  54. System.out.println(k);
  55. }
  56. }
  57. 【程序14】题目:输入某年某月某日,判断这一天是这一年的第几天?
  58. 1.程序分析:以35日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
  59. importjava.util.*;
  60. publicclasstest{
  61. publicstaticvoidmain(String[]args){
  62. intday=0;
  63. intmonth=0;
  64. intyear=0;
  65. intsum=0;
  66. intleap;
  67. System.out.print("请输入年,月,日\n");
  68. Scannerinput=newScanner(System.in);
  69. year=input.nextInt();
  70. month=input.nextInt();
  71. day=input.nextInt();
  72. switch(month)/*先计算某月以前月份的总天数*/
  73. {
  74. case1:
  75. sum=0;break;
  76. case2:
  77. sum=31;break;
  78. case3:
  79. sum=59;break;
  80. case4:
  81. sum=90;break;
  82. case5:
  83. sum=120;break;
  84. case6:
  85. sum=151;break;
  86. case7:
  87. sum=181;break;
  88. case8:
  89. sum=212;break;
  90. case9:
  91. sum=243;break;
  92. case10:
  93. sum=273;break;
  94. case11:
  95. sum=304;break;
  96. case12:
  97. sum=334;break;
  98. default:
  99. System.out.println("dataerror");break;
  100. }
  101. sum=sum+day;/*再加上某天的天数*/
  102. if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
  103. leap=1;
  104. else
  105. leap=0;
  106. if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
  107. sum++;
  108. System.out.println("Itisthetheday:"+sum);
  109. }
  110. }
  111. 【程序15】题目:输入三个整数x,y,z,请把这三个数由小到大输出。
  112. 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
  113. importjava.util.*;
  114. publicclasstest{
  115. publicstaticvoidmain(String[]args){
  116. inti=0;
  117. intj=0;
  118. intk=0;
  119. intx=0;
  120. System.out.print("请输入三个数\n");
  121. Scannerinput=newScanner(System.in);
  122. i=input.nextInt();
  123. j=input.nextInt();
  124. k=input.nextInt();
  125. if(i>j)
  126. {
  127. x=i;
  128. i=j;
  129. j=x;
  130. }
  131. if(i>k)
  132. {
  133. x=i;
  134. i=k;
  135. k=x;
  136. }
  137. if(j>k)
  138. {
  139. x=j;
  140. j=k;
  141. k=x;
  142. }
  143. System.out.println(i+","+j+","+k);
  144. }
  145. }
  146. 【程序16】题目:输出9*9口诀。
  147. 1.程序分析:分行与列考虑,共99列,i控制行,j控制列。
  148. publicclassjiujiu{
  149. publicstaticvoidmain(String[]args)
  150. {
  151. inti=0;
  152. intj=0;
  153. for(i=1;i<=9;i++)
  154. {for(j=1;j<=9;j++)
  155. System.out.print(i+"*"+j+"="+i*j+"\t");
  156. System.out.println();
  157. }
  158. }
  159. }
  160. 不出现重复的乘积(下三角)
  161. publicclassjiujiu{
  162. publicstaticvoidmain(String[]args)
  163. {
  164. inti=0;
  165. intj=0;
  166. for(i=1;i<=9;i++)
  167. {for(j=1;j<=i;j++)
  168. System.out.print(i+"*"+j+"="+i*j+"\t");
  169. System.out.println();
  170. }
  171. }
  172. }
  173. 上三角
  174. publicclassjiujiu{
  175. publicstaticvoidmain(String[]args)
  176. {
  177. inti=0;
  178. intj=0;
  179. for(i=1;i<=9;i++)
  180. {for(j=i;j<=9;j++)
  181. System.out.print(i+"*"+j+"="+i*j+"\t");
  182. System.out.println();
  183. }
  184. }
  185. }
  186. 【程序17】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  187. 1.程序分析:采取逆向思维的方法,从后往前推断。
  188. publicclass猴子吃桃{
  189. staticinttotal(intday){
  190. if(day==10){
  191. return1;
  192. }
  193. else{
  194. return(total(day+1)+1)*2;
  195. }
  196. }
  197. publicstaticvoidmain(String[]args)
  198. {
  199. System.out.println(total(1));
  200. }
  201. }
  202. 【程序18】题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
  203. 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
  204. importjava.util.ArrayList;
  205. publicclasspingpang{
  206. Stringa,b,c;
  207. publicstaticvoidmain(String[]args){
  208. String[]op={"x","y","z"};
  209. ArrayList<pingpang>arrayList=newArrayList<pingpang>();
  210. for(inti=0;i<3;i++)
  211. for(intj=0;j<3;j++)
  212. for(intk=0;k<3;k++){
  213. pingpanga=newpingpang(op[i],op[j],op[k]);
  214. if(!a.a.equals(a.b)&&!a.b.equals(a.c)&&!a.a.equals("x")
  215. &&!a.c.equals("x")&&!a.c.equals("z")){
  216. arrayList.add(a);
  217. }
  218. }
  219. for(Objecta:arrayList){
  220. System.out.println(a);
  221. }
  222. }
  223. publicpingpang(Stringa,Stringb,Stringc){
  224. super();
  225. this.a=a;
  226. this.b=b;
  227. this.c=c;
  228. }
  229. @Override
  230. publicStringtoString(){
  231. //TODOAuto-generatedmethodstub
  232. return"a的对手是"+a+","+"b的对手是"+b+","+"c的对手是"+c+"\n";
  233. }
  234. }
  235. 【程序19】题目:打印出如下图案(菱形)
  236. *
  237. ***
  238. ******
  239. ********
  240. ******
  241. ***
  242. *
  243. 1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
  244. 三角形:
  245. publicclassStartG{
  246. publicstaticvoidmain(String[]args)
  247. {
  248. inti=0;
  249. intj=0;
  250. for(i=1;i<=4;i++)
  251. {for(j=1;j<=2*i-1;j++)
  252. System.out.print("*");
  253. System.out.println("");
  254. }
  255. for(i=4;i>=1;i--)
  256. {for(j=1;j<=2*i-3;j++)
  257. System.out.print("*");
  258. System.out.println("");
  259. }
  260. }
  261. }
  262. 菱形:
  263. publicclassStartG{
  264. publicstaticvoidmain(String[]args)
  265. {
  266. inti=0;
  267. intj=0;
  268. for(i=1;i<=4;i++)
  269. {
  270. for(intk=1;k<=4-i;k++)
  271. System.out.print("");
  272. for(j=1;j<=2*i-1;j++)
  273. System.out.print("*");
  274. System.out.println("");
  275. }
  276. for(i=4;i>=1;i--)
  277. {
  278. for(intk=1;k<=5-i;k++)
  279. System.out.print("");
  280. for(j=1;j<=2*i-3;j++)
  281. System.out.print("*");
  282. System.out.println("");
  283. }
  284. }
  285. }
  286. 【程序20】题目:有一分数序列:2/13/25/38/513/821/13...求出这个数列的前20项之和。
  287. 1.程序分析:请抓住分子与分母的变化规律。
  288. publicclasstest20{
  289. publicstaticvoidmain(String[]args){
  290. floatfm=1f;
  291. floatfz=1f;
  292. floattemp;
  293. floatsum=0f;
  294. for(inti=0;i<20;i++){
  295. temp=fm;
  296. fm=fz;
  297. fz=fz+temp;
  298. sum+=fz/fm;
  299. //System.out.println(sum);
  300. }
  301. System.out.println(sum);
  302. }
  303. }
Java代码 收藏代码
  1. 【程序21】题目:求1+2!+3!+...+20!的和
  2. 1.程序分析:此程序只是把累加变成了累乘。
  3. publicclassEx21{
  4. staticlongsum=0;
  5. staticlongfac=0;
  6. publicstaticvoidmain(String[]args){
  7. longsum=0;
  8. longfac=1;
  9. for(inti=1;i<=10;i++){
  10. fac=fac*i;
  11. sum+=fac;
  12. }
  13. System.out.println(sum);
  14. }
  15. }
  16. 【程序22】题目:利用递归方法求5!。
  17. 1.程序分析:递归公式:fn=fn_1*4!
  18. importjava.util.Scanner;
  19. publicclassEx22{
  20. publicstaticvoidmain(String[]args){
  21. Scanners=newScanner(System.in);
  22. intn=s.nextInt();
  23. Ex22tfr=newEx22();
  24. System.out.println(tfr.recursion(n));
  25. }
  26. publiclongrecursion(intn){
  27. longvalue=0;
  28. if(n==1||n==0){
  29. value=1;
  30. }elseif(n>1){
  31. value=n*recursion(n-1);
  32. }
  33. returnvalue;
  34. }
  35. }
  36. 【程序23】题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
  37. 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
  38. publicclassEx23{
  39. staticintgetAge(intn){
  40. if(n==1){
  41. return10;
  42. }
  43. return2+getAge(n-1);
  44. }
  45. publicstaticvoidmain(String[]args){
  46. System.out.println("第五个的年龄为:"+getAge(5));
  47. }
  48. }
  49. 【程序24】题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
  50. importjava.util.Scanner;
  51. publicclassEx24{
  52. publicstaticvoidmain(String[]args){
  53. Ex24tn=newEx24();
  54. Scanners=newScanner(System.in);
  55. longa=s.nextLong();
  56. if(a<0||a>100000){
  57. System.out.println("ErrorInput,pleaserunthisprogramAgain");
  58. System.exit(0);
  59. }
  60. if(a>=0&&a<=9){
  61. System.out.println(a+"是一位数");
  62. System.out.println("按逆序输出是"+'\n'+a);
  63. }elseif(a>=10&&a<=99){
  64. System.out.println(a+"是二位数");
  65. System.out.println("按逆序输出是");
  66. tn.converse(a);
  67. }elseif(a>=100&&a<=999){
  68. System.out.println(a+"是三位数");
  69. System.out.println("按逆序输出是");
  70. tn.converse(a);
  71. }elseif(a>=1000&&a<=9999){
  72. System.out.println(a+"是四位数");
  73. System.out.println("按逆序输出是");
  74. tn.converse(a);
  75. }elseif(a>=10000&&a<=99999){
  76. System.out.println(a+"是五位数");
  77. System.out.println("按逆序输出是");
  78. tn.converse(a);
  79. }
  80. }
  81. publicvoidconverse(longl){
  82. Strings=Long.toString(l);
  83. char[]ch=s.toCharArray();
  84. for(inti=ch.length-1;i>=0;i--){
  85. System.out.print(ch[i]);
  86. }
  87. }
  88. }
  89. 【程序25】题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
  90. importjava.util.Scanner;
  91. publicclassEx25{
  92. staticint[]a=newint[5];
  93. staticint[]b=newint[5];
  94. publicstaticvoidmain(String[]args){
  95. booleanis=false;
  96. Scanners=newScanner(System.in);
  97. longl=s.nextLong();
  98. if(l>99999||l<10000){
  99. System.out.println("Inputerror,pleaseinputagain!");
  100. l=s.nextLong();
  101. }
  102. for(inti=4;i>=0;i--){
  103. a[i]=(int)(l/(long)Math.pow(10,i));
  104. l=(l%(long)Math.pow(10,i));
  105. }
  106. System.out.println();
  107. for(inti=0,j=0;i<5;i++,j++){
  108. b[j]=a[i];
  109. }
  110. for(inti=0,j=4;i<5;i++,j--){
  111. if(a[i]!=b[j]){
  112. is=false;
  113. break;
  114. }else{
  115. is=true;
  116. }
  117. }
  118. if(is==false){
  119. System.out.println("isnotaPalindrom!");
  120. }elseif(is==true){
  121. System.out.println("isaPalindrom!");
  122. }
  123. }
  124. }
  125. 【程序26】题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
  126. 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
  127. importjava.util.Scanner;
  128. publicclassEx26{
  129. publicstaticvoidmain(String[]args){
  130. //保存用户输入的第二个字母
  131. charweekSecond;
  132. //将Scanner类示例化为input对象,用于接收用户输入
  133. Scannerinput=newScanner(System.in);
  134. //开始提示并接收用户控制台输入
  135. System.out.print("请输入星期值英文的第一个字母,我来帮您判断是星期几:");
  136. Stringletter=input.next();
  137. //判断用户控制台输入字符串长度是否是一个字母
  138. if(letter.length()==1){
  139. //利用取第一个索引位的字符来实现让Scanner接收char类型输入
  140. charweekFirst=letter.charAt(0);
  141. switch(weekFirst){
  142. case'm':
  143. //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
  144. case'M':
  145. System.out.println("星期一(Monday)");
  146. break;
  147. case't':
  148. //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
  149. case'T':
  150. System.out.print("由于星期二(Tuesday)与星期四(Thursday)均以字母T开头,故需输入第二个字母才能正确判断:");
  151. letter=input.next();
  152. //判断用户控制台输入字符串长度是否是一个字母
  153. if(letter.length()==1){
  154. //利用取第一个索引位的字符来实现让Scanner接收char类型输入
  155. weekSecond=letter.charAt(0);
  156. //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
  157. if(weekSecond=='U'||weekSecond=='u'){
  158. System.out.println("星期二(Tuesday)");
  159. break;
  160. //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
  161. }elseif(weekSecond=='H'||weekSecond=='h'){
  162. System.out.println("星期四(Thursday)");
  163. break;
  164. //控制台错误提示
  165. }else{
  166. System.out.println("输入错误,不能识别的星期值第二个字母,程序结束!");
  167. break;
  168. }
  169. }else{
  170. //控制台错误提示
  171. System.out.println("输入错误,只能输入一个字母,程序结束!");
  172. break;
  173. }
  174. case'w':
  175. //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
  176. case'W':
  177. System.out.println("星期三(Wednesday)");
  178. break;
  179. case'f':
  180. //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
  181. case'F':
  182. System.out.println("星期五(Friday)");
  183. break;
  184. case's':
  185. //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
  186. case'S':
  187. System.out.print("由于星期六(Saturday)与星期日(Sunday)均以字母S开头,故需输入第二个字母才能正确判断:");
  188. letter=input.next();
  189. //判断用户控制台输入字符串长度是否是一个字母
  190. if(letter.length()==1){
  191. //利用取第一个索引位的字符来实现让Scanner接收char类型输入
  192. weekSecond=letter.charAt(0);
  193. //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
  194. if(weekSecond=='A'||weekSecond=='a'){
  195. System.out.println("星期六(Saturday)");
  196. break;
  197. //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
  198. }elseif(weekSecond=='U'||weekSecond=='u'){
  199. System.out.println("星期日(Sunday)");
  200. break;
  201. //控制台错误提示
  202. }else{
  203. System.out.println("输入错误,不能识别的星期值第二个字母,程序结束!");
  204. break;
  205. }
  206. }else{
  207. //控制台错误提示
  208. System.out.println("输入错误,只能输入一个字母,程序结束!");
  209. break;
  210. }
  211. default:
  212. //控制台错误提示
  213. System.out.println("输入错误,不能识别的星期值第一个字母,程序结束!");
  214. break;
  215. }
  216. }else{
  217. //控制台错误提示
  218. System.out.println("输入错误,只能输入一个字母,程序结束!");
  219. }
  220. }
  221. }
  222. 【程序27】题目:求100之内的素数
  223. publicclassEx27{
  224. publicstaticvoidmain(Stringargs[])
  225. {
  226. intsum,i;
  227. for(sum=2;sum<=100;sum++)
  228. {
  229. for(i=2;i<=sum/2;i++)
  230. {
  231. if(sum%i==0)
  232. break;
  233. }
  234. if(i>sum/2)
  235. System.out.println(sum+"是素数");
  236. }
  237. }
  238. }
  239. 【程序28】题目:对10个数进行排序
  240. 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
  241. importjava.util.Arrays;
  242. importjava.util.Random;
  243. importjava.util.Scanner;
  244. publicclassEx28{
  245. publicstaticvoidmain(String[]args){
  246. intarr[]=newint[11];
  247. Randomr=newRandom();
  248. for(inti=0;i<10;i++){
  249. arr[i]=r.nextInt(100)+1;//得到10个100以内的整数
  250. }
  251. Arrays.sort(arr);
  252. for(inti=0;i<arr.length;i++){
  253. System.out.print(arr[i]+"\t");
  254. }
  255. System.out.print("\nPleaseInputaintnumber:");
  256. Scannersc=newScanner(System.in);
  257. arr[10]=sc.nextInt();//输入一个int值
  258. Arrays.sort(arr);
  259. for(inti=0;i<arr.length;i++){
  260. System.out.print(arr[i]+"\t");
  261. }
  262. }
  263. }
  264. 【程序29】题目:求一个3*3矩阵对角线元素之和
  265. 1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
  266. publicclassEx29{
  267. publicstaticvoidmain(String[]args){
  268. doublesum=0;
  269. intarray[][]={{1,2,3},{4,5,6},{7,7,8}};
  270. for(inti=0;i<3;i++)
  271. for(intj=0;j<3;j++){
  272. if(i==j)
  273. sum=sum+array[i][j];
  274. }
  275. System.out.println(sum);
  276. }
  277. }
  278. 【程序30】题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
  279. 1.程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
  280. importjava.util.Random;
  281. publicclassArraySort{
  282. publicstaticvoidmain(String[]args)
  283. {inttemp=0;
  284. intmyarr[]=newint[12];
  285. Randomr=newRandom();
  286. for(inti=1;i<=10;i++)
  287. myarr[i]=r.nextInt(1000);
  288. for(intk=1;k<=10;k++)
  289. System.out.print(myarr[k]+",");
  290. for(inti=1;i<=9;i++)
  291. for(intk=i+1;k<=10;k++)
  292. if(myarr[i]>myarr[k])
  293. {
  294. temp=myarr[i];
  295. myarr[i]=myarr[k];
  296. myarr[k]=temp;
  297. }
  298. System.out.println("");
  299. for(intk=1;k<=10;k++)
  300. System.out.print(myarr[k]+",");
  301. myarr[11]=r.nextInt(1000);
  302. for(intk=1;k<=10;k++)
  303. if(myarr[k]>myarr[11])
  304. {
  305. temp=myarr[11];
  306. for(intj=11;j>=k+1;j--)
  307. myarr[j]=myarr[j-1];
  308. myarr[k]=temp;
  309. }
  310. System.out.println("");
  311. for(intk=1;k<=11;k++)
  312. System.out.print(myarr[k]+",");
  313. }
  314. }
Java代码 收藏代码
  1. 【程序31】题目:将一个数组逆序输出。
  2. 程序分析:用第一个与最后一个交换。
  3. 其实,用循环控制变量更简单:
  4. for(intk=11;k>=1;k--)
  5. System.out.print(myarr[k]+",");
  6. 【程序32】题目:取一个整数a从右端开始的47位。
  7. 程序分析:可以这样考虑:
  8. (1)先使a右移4位。
  9. (2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
  10. (3)将上面二者进行&运算。
  11. publicclassEx32{
  12. publicstaticvoidmain(String[]args)
  13. {
  14. inta=0;
  15. longb=18745678;
  16. a=(int)Math.floor(b%Math.pow(10,7)/Math.pow(10,3));
  17. System.out.println(a);
  18. }
  19. }
  20. 【程序33
  21. 题目:打印出杨辉三角形(要求打印出10行如下图)
  22. 1.程序分析:
  23. 1
  24. 11
  25. 121
  26. 1331
  27. 14641
  28. 15101051
  29. publicclassEx33{
  30. publicstaticvoidmain(Stringargs[]){
  31. inti,j;
  32. inta[][];
  33. a=newint[8][8];
  34. for(i=0;i<8;i++){
  35. a[i][i]=1;
  36. a[i][0]=1;
  37. }
  38. for(i=2;i<8;i++){
  39. for(j=1;j<=i-1;j++){
  40. a[i][j]=a[i-1][j-1]+a[i-1][j];
  41. }
  42. }
  43. for(i=0;i<8;i++){
  44. for(j=0;j<i;j++){
  45. System.out.printf(""+a[i][j]);
  46. }
  47. System.out.println();
  48. }
  49. }
  50. }
  51. 【程序34】题目:输入3个数a,b,c,按大小顺序输出。
  52. 1.程序分析:利用指针方法。
  53. publicclassEx34{
  54. publicstaticvoidmain(String[]args)
  55. {
  56. int[]arrays={800,56,500};
  57. for(inti=arrays.length;--i>=0;)
  58. {
  59. for(intj=0;j<i;j++)
  60. {
  61. if(arrays[j]>arrays[j+1])
  62. {
  63. inttemp=arrays[j];
  64. arrays[j]=arrays[j+1];
  65. arrays[j+1]=temp;
  66. }
  67. }
  68. }
  69. for(intn=0;n<arrays.length;n++)
  70. System.out.println(arrays[n]);
  71. }
  72. }
  73. 【程序35】题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
  74. importjava.util.*;
  75. publicclassEx35{
  76. publicstaticvoidmain(String[]args){
  77. inti,min,max,n,temp1,temp2;
  78. inta[];
  79. System.out.println("输入数组的长度:");
  80. Scannerkeyboard=newScanner(System.in);
  81. n=keyboard.nextInt();
  82. a=newint[n];
  83. for(i=0;i<n;i++){
  84. System.out.print("输入第"+(i+1)+"个数据");
  85. a[i]=keyboard.nextInt();
  86. }
  87. //以上是输入整个数组
  88. max=0;
  89. min=0;
  90. //设置两个标志,开始都指向第一个数
  91. for(i=1;i<n;i++){
  92. if(a[i]>a[max])
  93. max=i;//遍历数组,如果大于a[max],就把他的数组下标赋给max
  94. if(a[i]<a[min])
  95. min=i;//同上,如果小于a[min],就把他的数组下标赋给min
  96. }
  97. //以上for循环找到最大值和最小值,max是最大值的下标,min是最小值的下标
  98. temp1=a[0];
  99. temp2=a[min];//这两个temp只是为了在交换时使用
  100. a[0]=a[max];
  101. a[max]=temp1;//首先交换a[0]和最大值a[max]
  102. if(min!=0){//如果最小值不是a[0],执行下面
  103. a[min]=a[n-1];
  104. a[n-1]=temp2;//交换a[min]和a[n-1]
  105. }else{//如果最小值是a[0],执行下面
  106. a[max]=a[n-1];
  107. a[n-1]=temp1;
  108. }
  109. for(i=0;i<n;i++){//输出数组
  110. System.out.print(a[i]+"");
  111. }
  112. }
  113. }
  114. 【程序36】题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
  115. 【程序37
  116. 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从13报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  117. importjava.util.Scanner;
  118. publicclassEx37{
  119. publicstaticvoidmain(String[]args){
  120. Scanners=newScanner(System.in);
  121. intn=s.nextInt();
  122. boolean[]arr=newboolean[n];
  123. for(inti=0;i<arr.length;i++){
  124. arr[i]=true;//下标为TRUE时说明还在圈里
  125. }
  126. intleftCount=n;
  127. intcountNum=0;
  128. intindex=0;
  129. while(leftCount>1){
  130. if(arr[index]==true){//当在圈里时
  131. countNum++;//报数递加
  132. if(countNum==3){//报道3时
  133. countNum=0;//从零开始继续报数
  134. arr[index]=false;//此人退出圈子
  135. leftCount--;//剩余人数减一
  136. }
  137. }
  138. index++;//每报一次数,下标加一
  139. if(index==n){//是循环数数,当下标大于n时,说明已经数了一圈,
  140. index=0;//将下标设为零重新开始。
  141. }
  142. }
  143. for(inti=0;i<n;i++){
  144. if(arr[i]==true){
  145. System.out.println(i);
  146. }
  147. }
  148. }
  149. }
  150. 【程序38
  151. 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
  152. importjava.util.Scanner;
  153. publicclassEx38{
  154. publicstaticvoidmain(String[]args)
  155. {
  156. Scanners=newScanner(System.in);
  157. System.out.println("请输入一个字符串");
  158. Stringmys=s.next();
  159. System.out.println(str_len(mys));
  160. }
  161. publicstaticintstr_len(Stringx)
  162. {
  163. returnx.length();
  164. }
  165. }
  166. 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
  167. 【程序39
  168. 题目:字符串排序。
  169. importjava.util.*;
  170. publicclasstest{
  171. publicstaticvoidmain(String[]args)
  172. {
  173. ArrayList<String>list=newArrayList<String>();
  174. list.add("010101");
  175. list.add("010003");
  176. list.add("010201");
  177. Collections.sort(list);
  178. for(inti=0;i<list.size();i++){
  179. System.out.println(list.get(i));
  180. }
  181. }
  182. }
  183. 【程序40
  184. 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
  185. publicclassDg{
  186. staticintts=0;//桃子总数
  187. intfs=1;//记录分的次数
  188. staticinths=5;//猴子数...
  189. inttsscope=5000;//桃子数的取值范围.太大容易溢出.
  190. publicintfT(intt){
  191. if(t==tsscope){
  192. //当桃子数到了最大的取值范围时取消递归
  193. System.out.println("结束");
  194. return0;
  195. }
  196. else{
  197. if((t-1)%hs==0&&fs<=hs){
  198. if(fs==hs)
  199. {
  200. System.out.println("桃子数="+ts+"时满足分桃条件");
  201. }
  202. fs+=1;
  203. returnfT((t-1)/5*4);//返回猴子拿走一份后的剩下的总数
  204. }
  205. else
  206. {
  207. //没满足条件
  208. fs=1;//分的次数重置为1
  209. returnfT(ts+=1);//桃子数加+1
  210. }
  211. }
  212. }
  213. publicstaticvoidmain(String[]args){
  214. newDg().fT(0);
  215. }
  216. }

分享到:
评论

相关推荐

    JAVA经典算法40题.pdf

    JAVA经典算法40题.pdf 本资源是JAVA经典算法40题的PDF文件,该文件包含了40个经典算法题目,每个题目都有相应的Java代码实现。以下是对标题、描述、标签和部分内容的知识点解释: 标签:“数据库” 虽然标签是...

    JAVA经典算法40题面试题案例.pdf

    【JAVA经典算法40题面试题案例】 在Java面试中,算法题是考察候选人编程能力的重要环节。...它们是Java程序员在面试中可能遇到的经典算法题,熟练掌握这些技巧能够提高解决问题的能力,并有助于在面试中脱颖而出。

    java经典算法40题

    【Java经典算法40题】涉及的编程知识点主要包括算法设计、递归、数学逻辑和循环控制,这些都是Java编程中非常重要的部分。以下是针对题目中提到的四个程序的详细解析: **程序1:斐波那契数列** 这个问题是经典的...

    JAVA经典算法40题.zip

    "JAVA经典算法40题"这个压缩包提供了一个学习和实践的机会,它包含了40个Java编程中的算法挑战。这些题目涵盖了数据结构、排序、搜索、图论等多个核心领域,旨在帮助Java程序员深化对算法的理解,提高编程效率。 ...

    JAVA 经典算法 40 题.

    这些题目都是Java算法学习中的经典实例,有助于锻炼开发者的逻辑思维、问题解决能力和编程技巧。通过解决这些问题,开发者可以深入理解算法的基本概念,同时也能提高处理实际问题的能力。在面试或日常开发工作中,...

    java经典算法90题含源码及答案.rar

    通过解决这些算法题,开发者可以锻炼逻辑思维,理解和掌握数据结构,如数组、链表、栈、队列、树、图等,以及排序、搜索、图论、动态规划等核心算法。 在JAVA经典算法40题.doc中,可能包含的题目类型有递归、分治、...

    JAVA经典算法40题(20210930134841).pdf

    首先,从文件的标题“JAVA经典算法40题”和描述“JAVA经典算法40题”可知,该文档很可能是关于Java编程语言的经典算法例题的集合,这些题目对于学习和巩固Java算法设计与分析的知识非常有帮助。 接着从文件的【部分...

Global site tag (gtag.js) - Google Analytics