`
lvwenwen
  • 浏览: 930358 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

java经典算法40题

阅读更多
排序算法:http://www.cnblogs.com/morewindows/category/314533.html
[推荐] JAVA经典算法收集整理

java排序算法的比较

import java.util.*;+ u2 d0 x( N( J: \
import java.io.*;

public class SortAlgorithm
{
static Random rand = new Random();
0 j! x6 D' s) l9 L9 G5 p
4 u' O- Y' P$ \# g+ o
  void bubbleSort(int[] numlist)  // 冒泡排序算法
    {# g) X+ Y, L6 m7 b, S3 u
     int temp;' m8 W& _/ @& @' G8 h6 D
     for(int j=1;j<numlist.length;j++)/ v, z2 M( @& Q) n
        for(int i=0;i<numlist.length-j;i++)7 ?- @# d" Y6 I% l% N0 t
         if(numlist>numlist[i+1])# l& }/ {6 w! `
           {6 ?) }$ A8 T7 D1 _+ i# J
            temp =  numlist[i+1];+ g8 L& E8 m5 X1 ~1 T5 q
            numlist[i+1] = numlist;
            numlist = temp;          
            }                                                 
    }* H. c# Y% W# }4 ]. P! D6 {
   - E/ y1 T7 \8 @& d4 K$ T
  
    void selectionSort (int[] numlist)   //选择排序算法
    {
     int temp;9 N3 w# S! b8 K" ]9 j  e
     for(int i=0;i<numlist.length-1;i++)
        for(int j=i+1;j<numlist.length;j++)
           if(numlist>numlist[j])
           {) G: u' A) s) Y! S9 b, W) A# y4 K7 J
            temp = numlist[j];2 u+ @! S% t* e. _$ D
            numlist[j] = numlist;. c: v$ r; E+ w; K/ C
            numlist = temp;; C& v- Y( t6 ~0 k. Z
            3 k$ ]0 T4 K+ v- \4 j
            }   
     }. {4 i2 d% {8 h
  
  
   & \; q/ T/ \# E& M
    void insertSort (int[] numlist)      //插入排序算法
    {/ _6 A2 v* Y" |  n( \
     int temp,in,out;
     for(out=1;out<numlist.length;out++)) r3 Q% n+ J4 E" x
     {
      temp=numlist[out];* p9 i2 h$ `2 I; s3 z3 G7 t* @$ |
      in=out;
      while(in>0 && numlist[in-1]>=temp): a& t/ O# T0 C: p  [0 v% K9 \
       {, F& T3 a3 ]: X* o& J
         numlist[in]=numlist[in-1];
          --in;0 G% O4 L% p5 S' X& p9 H: {4 J
        }
      numlist[in]=temp;, ^0 u/ V& V9 U# O6 o. y) P
      }  c& ^8 I  `0 X6 d9 _
     , v0 {6 N) f3 t: J- l
    
     }, _& M4 M# L9 N  s6 l9 ?
  
   0 G0 v1 ?/ M7 ?
  
    void display (int[] num)    // 打印出排序结果# @% F  X8 b5 K8 w8 ^& f, H
    {8 F) T9 Q4 j. i# d, I: z
     for(int i = 0;i<num.length;i++)* M0 p! T+ h5 l
        System.out.print(num+" ");) J. ?3 t  d4 [+ [1 D; O
     System.out.println("");
     4 o4 J4 ~# @8 F. a4 k& _
     }( h0 W# {& Z+ W6 S8 r
     9 o" L$ C/ i/ A: t  C$ g
   0 e) A3 x3 C  D# o4 n$ J' G! r
   # a% x7 A( n9 k9 @+ m( @1 V: c
  
    static int pRand(int mod)             //  生成随即数组0 S9 P" M+ }. H) q- P) y
    {' b) E! E6 b  a% m4 t$ j& N+ w
     return Math.abs(rand.nextInt())%mod;' R$ F$ W7 T5 I5 O! |1 @
     2 l, X" K8 Q6 y9 q; k1 T
     }5 \6 L" B, z1 j2 C$ b
  
       0 p/ c- g/ e; J4 X  J. |6 N: S8 {
  
    public static void main(String args[])throws IOException
    {
       SortAlgorithm  sortAlgorithm = new SortAlgorithm();, f9 R1 h2 ?! d) s) m5 V  u- X
       int[] numList = new int[10];
     
       for(int i = 0;i<numList.length;i++)
          numList = pRand(100);         //调用pRand方法,把随即生成的数据输入到
                                               // 数组中
        
       System.out.println("随即生成的数组是:");
                                                     //  打印出原数组,
       for(int j =0;j<numList.length;j++); m! q4 K4 {7 y* _3 c4 p" p7 b
             System.out.print(numList[j]+" ");
         - z6 C- G2 e# ]
         / M4 s3 q4 P2 ]$ j( R% y8 _3 X
        System.out.println("");       8 }" \8 G: y4 b3 n5 }8 x8 n
         long begin = System.currentTimeMillis();   //排序开始时间,调用系统的当前时间
         sortAlgorithm.bubbleSort(numList);        //执行冒泡排序
         long end = System.currentTimeMillis();      //排序结束时间,调用系统当前时间; i; V: @8 h6 U' [  E
         System.out.println("冒泡排序用时为:" + (end-begin));    //排序用时
         System.out.println("排序后的数组为:");
         sortAlgorithm.display(numList);
       
       
         begin = System.currentTimeMillis();
         sortAlgorithm.selectionSort(numList);2 \: o, i* }) K5 [
         end = System.currentTimeMillis();7 Q6 [/ @  i5 u% O! O& \6 D
         System.out.println("选择排序用时为:" +(end-begin));' x# B; e, U- m# Y
         System.out.println("排序后的数组为:");
         sortAlgorithm.display(numList);    
        
         $ ]7 ^: T/ r. q$ E  I
          begin = System.currentTimeMillis();! Q+ L4 O( f' J( F1 d
          sortAlgorithm.insertSort(numList);
          end = System.currentTimeMillis();# B8 v6 U6 R0 K( i
          System.out.println("插入排序用时为:" + (end-begin));
          System.out.println("排序后的数组为:");: A; C  y* A- O4 n0 l! z& L
          sortAlgorithm.display(numList);   ; [% k' `( t3 s. H. a: w' u) C9 s
                               
     }
' j, V) F8 D- Q  h* O
}$ Y. @2 {  p  f* i, ]- |
$ F% D- B8 C, U) o# y( ?; H

  y4 e2 z# R; s
- v- U7 I; d" E0 q7 A) @/ R

题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

, h8 ?; d; ?# |& t9 ]5 a: x

static int[] bits = new int[] { 1, 2, 3, 4, 5 };5 z* ]! S* \7 G; k3 E
/**# j! H" r. P$ J. ^( A7 q
* @param args
*/
public static void main(String[] args) {, a1 J; k" E! X& o7 b, L
sort("", bits);# _/ w$ K+ x; S1 Y8 s0 o% h4 H
}- V3 K3 H- X# z! k+ U
private static void sort(String prefix, int[] a) {# S0 J. c) p7 @6 l
if (a.length == 1) {9 V! `/ L: t' w3 a4 p! X% E7 T
System.out.println(prefix + a[0]);
}
for (int i = 0; i < a.length; i++) {
sort(prefix + a, copy(a, i));
}
}5 v2 N. f+ C+ k1 Z# s+ u. u( s- \
private static int[] copy(int[] a,int index){
int[] b = new int[a.length-1];& |% d" {; }% ~
System.arraycopy(a, 0, b, 0, index);
System.arraycopy(a, index+1, b, index, a.length-index-1);
return b;) Z) K( }% `$ L5 w, h
}

6 _1 o! w! B6 h( d
**********************************************************************% G, F% Q5 _" q4 Y8 [2 E

  基本思路:
1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。7 o( Y2 h) h  f
2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:
  1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。  S3 T1 y3 E0 ~1 d5 ~
  2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果
  3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。
采用二维数组定义图结构,最后的代码是:
import java.util.Iterator;
import java.util.TreeSet;0 P1 @9 G8 n. V7 W
public class TestQuestion {
private String[] b = new String[]{"1", "2", "2", "3", "4", "5"};
private int n = b.length;
private boolean[] visited = new boolean[n];2 x! y. D6 n6 y1 t# a
private int[][] a = new int[n][n];
private String result = "";
private TreeSet set = new TreeSet();
public static void main(String[] args) {, I' ^+ [- g0 O
new TestQuestion().start();  I" [- V! ~9 \
}
private void start() {
// Initial the map a[][]
for (int i = 0; i < n; i++) {# S7 ?* f4 Q* A* e8 c. A
for (int j = 0; j < n; j++) {' z+ L( ]7 C' h9 \; D+ d/ ~. Q5 k% O
if (i == j) {. l1 ]& M5 h  ?% `
a[j] = 0;6 W" d; W& U' q3 S/ z4 O
} else {
    a[j] = 1;
}
}& T7 D$ ~% c9 H5 r9 q- g
}. o% E0 h) l9 l$ I
// 3 and 5 can not be the neighbor.
a[3][5] = 0;
a[5][3] = 0;
// Begin to depth search.# w. V" @7 t3 j. }
for (int i = 0; i < n; i++) {
    this.depthFirstSearch(i);( t, g7 E4 j7 W7 T* N- n" y0 k  Y
}
// Print result treeset.
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();3 Y' |$ ^2 k/ E7 W% f
// "4" can not be the third position./ h" m+ \: U# c9 m. t# S
if (string.indexOf("4") != 2) {5 T1 c* C, w$ s
System.out.println(string);
}
}  V! k7 X: J: B& B: d7 f
}
private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];' T/ a5 i. P' M. G8 H" D
if (result.length() == n) {
// Filt the duplicate value., M' u2 ]; ]; l7 I
set.add(result);
}& e* _) G- K% ~! o# A
for(int j = 0; j < n; j++) {+ f$ Q, t9 c! ]1 ?# I
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
} else {
continue;( }
}
}
// restore the result value and visited value after listing a node.
    result = result.substring(0, result.length() -1);
    visited[startIndex] = false;
}



1: JAVA经典算法40题
  2: 【程序1】   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?  
  3: 1.程序分析:   兔子的规律为数列1,1,2,3,5,8,13,21....  
  4: public class exp2{
  5:  public static void main(String args[]){
  6:   int i=0;
  7:   for(i=1;i<=20;i++)
  8:    System.out.println(f(i));
  9:  }
10:  public static int f(int x)
11:  {
12:   if(x==1 || x==2)
13:    return 1;
14:   else
15:    return f(x-1)+f(x-2);
16:  }
17: }
18: 或
19: public class exp2{
20:  public static void main(String args[]){
21:   int i=0;
22:   math mymath = new math();
23:   for(i=1;i<=20;i++)
24:    System.out.println(mymath.f(i));
25:  }
26:
27: }
28: class math
29: {
30:  public int f(int x)
31:  {
32:   if(x==1 || x==2)
33:    return 1;
34:   else
35:    return f(x-1)+f(x-2);
36:  }
37: }
38:
39: 【程序2】   题目:判断101-200之间有多少个素数,并输出所有素数。  
40: 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,  
41: 则表明此数不是素数,反之是素数。  
42: public class exp2{
43:  public static void main(String args[]){
44:   int i=0;
45:   math mymath = new math();
46:   for(i=2;i<=200;i++)
47:    if(mymath.iszhishu(i)==true)
48:    System.out.println(i);
49:  }
50: }
51: class math
52: {
53:  public int f(int x)
54:  {
55:   if(x==1 || x==2)
56:    return 1;
57:   else
58:    return f(x-1)+f(x-2);
59:  }
60:  public boolean iszhishu(int x)
61:  {
62:   for(int i=2;i<=x/2;i++)
63:    if (x % 2==0 )
64:     return false;
65:   return true;
66:  }
67: }
68:
69: 【程序3】   题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。  
70: 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。  
71: public class exp2{
72:  public static void main(String args[]){
73:   int i=0;
74:   math mymath = new math();
75:   for(i=100;i<=999;i++)
76:    if(mymath.shuixianhua(i)==true)
77:    System.out.println(i);
78:  }
79: }
80: class math
81: {
82:  public int f(int x)
83:  {
84:   if(x==1 || x==2)
85:    return 1;
86:   else
87:    return f(x-1)+f(x-2);
88:  }
89:  public boolean iszhishu(int x)
90:  {
91:   for(int i=2;i<=x/2;i++)
92:    if (x % 2==0 )
93:     return false;
94:   return true;
95:  }
96:  public boolean shuixianhua(int x)
97:  {
98:     int i=0,j=0,k=0;
99:     i=x / 100;
100:     j=(x % 100) /10;
101:     k=x % 10;
102:     if(x==i*i*i+j*j*j+k*k*k)
103:      return true;
104:     else
105:      return false;
106:    
107:  }
108: }
109: 【程序4】   题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。  
110: 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:  
111: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。  
112: (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。  
113: (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。  
114: public class exp2{
115:  public exp2(){}
116:     public void fengjie(int n){
117:         for(int i=2;i<=n/2;i++){
118:             if(n%i==0){
119:                 System.out.print(i+"*");
120:                 fengjie(n/i);
121:                 }
122:         }
123:         System.out.print(n);
124:         System.exit(0);///不能少这句,否则结果会出错
125:         }
126:         public static void main(String[] args){
127:              String str="";
128:              exp2 c=new exp2();
129:              str=javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):");
130:              int N;
131:              N=0;
132:              try{
133:                      N=Integer.parseInt(str);
134:                      }catch(NumberFormatException e){
135:                          e.printStackTrace();
136:                          }
137:             System.out.print(N+"分解质因数:"+N+"=");
138:             c.fengjie(N);
139:         }   
140: }
141: 【程序5】   题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。  
142: 1.程序分析:(a> b)?a:b这是条件运算符的基本例子。  
143: import javax.swing.*;
144: public class ex5 {
145:         public static void main(String[] args){
146:              String str="";
147:              str=JOptionPane.showInputDialog("请输入N的值(输入exit退出):");
148:              int N;
149:              N=0;
150:              try{
151:                 N=Integer.parseInt(str);
152:               }
153:              catch(NumberFormatException e){
154:                 e.printStackTrace();
155:                }
156:              str=(N>90?"A":(N>60?"B":"C"));
157:              System.out.println(str);
158:         }   
159: }
160: 【程序6】   题目:输入两个正整数m和n,求其最大公约数和最小公倍数。  
161: 1.程序分析:利用辗除法。  
162: 最大公约数:
163: public class CommonDivisor{
164:     public static void main(String args[])
165:     {
166:         commonDivisor(24,32);
167:     }
168:     static int commonDivisor(int M, int N)
169:     {
170:         if(N<0||M<0)
171:         {
172:             System.out.println("ERROR!");
173:             return -1;
174:         }
175:         if(N==0)
176:         {
177:             System.out.println("the biggest common divisor is :"+M);
178:             return M;
179:         }
180:         return commonDivisor(N,M%N);
181:     }
182: }
183: 最小公倍数和最大公约数:
184: import java.util.Scanner;
185: public class CandC
186: {
187: //下面的方法是求出最大公约数
188: public static int **(int m, int n)
189: {
190: while (true)
191: {
192: if ((m = m % n) == 0)
193: return n;
194: if ((n = n % m) == 0)
195: return m;
196: }
197: }
198: public static void main(String args[]) throws Exception
199: {
200: //取得输入值
201: //Scanner chin = new Scanner(System.in);
202: //int a = chin.nextInt(), b = chin.nextInt();
203: int a=23; int b=32;
204: int c = **(a, b);
205: System.out.println("最小公倍数:" + a * b / c + "\n最大公约数:" + c);
206: }
207: }
208: 【程序7】   题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。  
209: 1.程序分析:利用while语句,条件为输入的字符不为 '\n '.  
210: import java.util.Scanner;
211: public class ex7 {
212:   public static void main(String args[])
213:   {
214:    System.out.println("请输入字符串:");
215:    Scanner scan=new Scanner(System.in);
216:    String str=scan.next();
217:    String E1="[\u4e00-\u9fa5]";
218:    String E2="[a-zA-Z]";
219:    int countH=0;
220:    int countE=0;
221:    char[] arrChar=str.toCharArray();
222:    String[] arrStr=new String[arrChar.length];
223:    for (int i=0;i<arrChar.length ;i++ )
224:    {
225:     arrStr[i]=String.valueOf(arrChar[i]);
226:    }
227:    for (String i: arrStr )
228:    {
229:     if (i.matches(E1))
230:     {
231:      countH++;
232:     }
233:     if (i.matches(E2))
234:     {
235:      countE++;
236:     }
237:    }
238:    System.out.println("汉字的个数"+countH);
239:    System.out.println("字母的个数"+countE);
240:   }
241:  }
242: 【程序8】   题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。  
243: 1.程序分析:关键是计算出每一项的值。  
244: import java.io.*;
245: public class Sumloop {
246:   public static void main(String[] args) throws IOException
247:   {
248:    int s=0;
249:    String output="";
250:    BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));
251:    System.out.println("请输入a的值");
252:    String input =stadin.readLine();
253:    for(int i =1;i<=Integer.parseInt(input);i++)
254:    {
255:     output+=input;
256:     int a=Integer.parseInt(output);
257:     s+=a;
258:    }
259:    System.out.println(s);
260:   }
261: }
262: 另解:
263: import java.io.*;
264: public class Sumloop {
265:   public static void main(String[] args) throws IOException
266:   {
267:    int s=0;
268:    int n;
269:    int t=0;
270:    BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in));
271:    String input = stadin.readLine();
272:    n=Integer.parseInt(input);
273:    for(int i=1;i<=n;i++){
274:     t=t*10+n;
275:     s=s+t;
276:     System.out.println(t);
277:    }
278:    System.out.println(s);
279:   }
280: }
281: 【程序9】   题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程   找出1000以内的所有完数。  
282: public class Wanshu {
283:  public static void main(String[] args)
284:  {
285:   int s;
286:   for(int i=1;i<=1000;i++)
287:   {
288:    s=0;
289:    for(int j=1;j<i;j++)
290:     if(i % j==0)
291:      s=s+j;
292:    if(s==i)
293:     System.out.print(i+" ");
294:   }
295:   System.out.println();
296:  }
297: }
298: 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在   第10次落地时,共经过多少米?第10次反弹多高?  
299: public class Ex10 {
300:  public static void main(String[] args)
301:  {
302:   double s=0;
303:   double t=100;
304:   for(int i=1;i<=10;i++)
305:   {
306:          s+=t;
307:          t=t/2;
308:   }
309:   System.out.println(s);
310:   System.out.println(t);
311:  
312:  }
313: }
314: 【程序11】   题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?  
315: 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去   掉不满足条件的排列。  
316: public class Wanshu {
317:  public static void main(String[] args)
318:  {
319:     int i=0;
320:     int j=0;
321:     int k=0;
322:     int t=0;
323:     for(i=1;i<=4;i++)
324:      for(j=1;j<=4;j++)
325:       for(k=1;k<=4;k++)
326:        if(i!=j && j!=k && i!=k)
327:        {t+=1;
328:         System.out.println(i*100+j*10+k);
329:  } 
330:     System.out.println (t);
331:     }
332: }
333: 【程序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,求应发放奖金总数?  
334: 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。  
335: import java .util.*;
336: public class test {
337:  public static void main (String[]args){
338:   double sum;//声明要储存的变量应发的奖金
339:   Scanner input =new Scanner (System.in);//导入扫描器
340:   System.out.print ("输入当月利润");
341:   double lirun=input .nextDouble();//从控制台录入利润
342:   if(lirun<=100000){
343:    sum=lirun*0.1;
344:   }else if (lirun<=200000){
345:    sum=10000+lirun*0.075;
346:   }else if (lirun<=400000){
347:    sum=17500+lirun*0.05;
348:   }else if (lirun<=600000){
349:    sum=lirun*0.03;
350:   }else if (lirun<=1000000){
351:    sum=lirun*0.015;
352:   } else{
353:    sum=lirun*0.01;
354:   }
355:   System.out.println("应发的奖金是"+sum);
356:   }
357: }
358: 后面其他情况的代码可以由读者自行完善.
359:
360: 【程序13】  
361: 题目:一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?  
362: 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:  
363: public class test {
364:  public static void main (String[]args){
365:     long k=0;
366:     for(k=1;k<=100000l;k++)
367:      if(Math.floor(Math.sqrt(k+100))==Math.sqrt(k+100) && Math.floor(Math.sqrt(k+168))==Math.sqrt(k+168))
368:       System.out.println(k);
369:  }
370: }
371: 【程序14】 题目:输入某年某月某日,判断这一天是这一年的第几天?  
372: 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。  
373: import java.util.*;
374: public class test {
375:  public static void main (String[]args){
376:   int day=0;
377:   int month=0;
378:   int year=0;
379:   int sum=0;
380:   int leap;  
381:   System.out.print("请输入年,月,日\n");  
382:   Scanner input = new Scanner(System.in);
383:   year=input.nextInt();
384:   month=input.nextInt();
385:   day=input.nextInt();
386:   switch(month) /*先计算某月以前月份的总天数*/ 
387:   {  
388:   case 1:
389:    sum=0;break;  
390:   case 2:
391:    sum=31;break;  
392:   case 3:
393:    sum=59;break;  
394:   case 4:
395:    sum=90;break;  
396:   case 5:
397:    sum=120;break;  
398:   case 6:
399:    sum=151;break;  
400:   case 7:
401:    sum=181;break;  
402:   case 8:
403:    sum=212;break;  
404:   case 9:
405:    sum=243;break;  
406:   case 10:
407:    sum=273;break;  
408:   case 11:
409:    sum=304;break;  
410:   case 12:
411:    sum=334;break;  
412:   default:
413:    System.out.println("data error");break;
414:   }  
415:   sum=sum+day; /*再加上某天的天数*/ 
416:   if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 
417:    leap=1;  
418:   else 
419:    leap=0;  
420:   if(leap==1 && month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ 
421:    sum++;  
422:   System.out.println("It is the the day:"+sum);
423:   }
424: }
425: 【程序15】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。  
426: 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则将x与z的值进行交换,这样能使x最小。  
427: import java.util.*;
428: public class test {
429:  public static void main (String[]args){
430:   int i=0;
431:   int j=0;
432:   int k=0;
433:   int x=0;
434:   System.out.print("请输入三个数\n");  
435:   Scanner input = new Scanner(System.in);
436:   i=input.nextInt();
437:   j=input.nextInt();
438:   k=input.nextInt();
439:         if(i>j)
440:         {
441:           x=i;
442:           i=j;
443:           j=x;
444:         }
445:         if(i>k)
446:         {
447:           x=i;
448:           i=k;
449:           k=x;
450:         }
451:         if(j>k)
452:         {
453:           x=j;
454:           j=k;
455:           k=x;
456:         }
457:   System.out.println(i+", "+j+", "+k);
458:  }
459: }
460: 【程序16】 题目:输出9*9口诀。  
461: 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。  
462: public class jiujiu {
463: public static void main(String[] args)
464: {
465:  int i=0;
466:  int j=0;
467:  for(i=1;i<=9;i++)
468:  { for(j=1;j<=9;j++)
469:    System.out.print(i+"*"+j+"="+i*j+"\t");
470:          System.out.println();
471:  }
472: }
473: }
474: 不出现重复的乘积(下三角)
475: public class jiujiu {
476: public static void main(String[] args)
477: {
478:  int i=0;
479:  int j=0;
480:  for(i=1;i<=9;i++)
481:  { for(j=1;j<=i;j++)
482:    System.out.print(i+"*"+j+"="+i*j+"\t");
483:          System.out.println();
484:  }
485: }
486: }
487: 上三角
488: public class jiujiu {
489: public static void main(String[] args)
490: {
491:  int i=0;
492:  int j=0;
493:  for(i=1;i<=9;i++)
494:  { for(j=i;j<=9;j++)
495:    System.out.print(i+"*"+j+"="+i*j+"\t");
496:          System.out.println();
497:  }
498: }
499: }
500: 【程序17】   题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。  
501: 1.程序分析:采取逆向思维的方法,从后往前推断。  
502: public class 猴子吃桃 {
503:  static int total(int day){
504:    if(day == 10){
505:     return 1;
506:    }
507:    else{
508:     return (total(day+1)+1)*2;
509:    }
510:   }
511: public static void main(String[] args)
512: {
513:  System.out.println(total(1));
514: }
515: }
516: 【程序18】   题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。  
517: 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,   则表明此数不是素数,反之是素数。  
518: import java.util.ArrayList;
519: public class pingpang {
520:   String a,b,c;
521:   public static void main(String[] args) {
522:    String[] op = { "x", "y", "z" };
523:    ArrayList<pingpang> arrayList=new ArrayList<pingpang>();
524:    for (int i = 0; i < 3; i++)
525:     for (int j = 0; j < 3; j++)
526:      for (int k = 0; k < 3; k++) {
527:       pingpang a=new pingpang(op[i],op[j],op[k]);
528:       if(!a.a.equals(a.b)&&!a.b.equals(a.c)&&!a.a.equals("x")
529:         &&!a.c.equals("x")&&!a.c.equals("z")){
530:        arrayList.add(a);
531:       }
532:      }
533:    for(Object a:arrayList){
534:    System.out.println(a);
535:    }
536:   }
537:   public pingpang(String a, String b, String c) {
538:    super();
539:    this.a = a;
540:    this.b = b;
541:    this.c = c;
542:   }
543:   @Override
544:   public String toString() {
545:    // TODO Auto-generated method stub
546:    return "a的对手是"+a+","+"b的对手是"+b+","+"c的对手是"+c+"\n";
547:   }
548: }
549: 【程序19】  题目:打印出如下图案(菱形)  
550: *  
551: ***  
552: ******  
553: ********  
554: ******  
555: ***  
556: *  
557: 1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重   for循环,第一层控制行,第二层控制列。  
558: 三角形:
559: public class StartG {
560:    public static void main(String [] args)
561:    {
562:     int i=0;
563:     int j=0;
564:     for(i=1;i<=4;i++)
565:     {   for(j=1;j<=2*i-1;j++)
566:       System.out.print("*");
567:          System.out.println("");   
568:     }
569:        for(i=4;i>=1;i--)
570:        { for(j=1;j<=2*i-3;j++)
571:             System.out.print("*");
572:           System.out.println("");   
573:        }
574:    }
575:  }
576:
577: 菱形:
578: public class StartG {
579:    public static void main(String [] args)
580:    {
581:     int i=0;
582:     int j=0;
583:     for(i=1;i<=4;i++)
584:     {
585:      for(int k=1; k<=4-i;k++)
586:        System.out.print(" ");
587:      for(j=1;j<=2*i-1;j++)
588:       System.out.print("*");
589:      System.out.println("");   
590:     }
591:        for(i=4;i>=1;i--)
592:        {
593:      for(int k=1; k<=5-i;k++)
594:         System.out.print(" ");
595:         for(j=1;j<=2*i-3;j++)
596:             System.out.print("*");
597:          System.out.println("");   
598:        }
599:    }
600:  }
601:
602: 【程序20】   题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。  
603: 1.程序分析:请抓住分子与分母的变化规律。  
604: public class test20 {
605:  public static void main(String[] args) {
606:   float fm = 1f;
607:   float fz = 1f;
608:   float temp;
609:   float sum = 0f;
610:   for (int i=0;i<20;i++){
611:    temp = fm;
612:    fm = fz;
613:    fz = fz + temp;
614:    sum += fz/fm;
615:    //System.out.println(sum);
616:   }
617:   System.out.println(sum);
618:  }
619: }
620: 【程序21】   题目:求1+2!+3!+...+20!的和  
621: 1.程序分析:此程序只是把累加变成了累乘。  
622: public class Ex21 {
623:  static long sum = 0;
624:  static long fac = 0;
625:  public static void main(String[] args) {
626:     long sum = 0;
627:     long fac = 1;
628:     for(int i=1; i<=10; i++) {
629:      fac = fac * i;
630:      sum += fac;
631:     }
632:     System.out.println(sum);
633:  }
634:  }
635: 【程序22】   题目:利用递归方法求5!。  
636: 1.程序分析:递归公式:fn=fn_1*4!  
637: import java.util.Scanner;
638: public class Ex22 {
639: public static void main(String[] args) {
640:    Scanner s = new Scanner(System.in);
641:    int n = s.nextInt();
642:    Ex22 tfr = new Ex22();
643:    System.out.println(tfr.recursion(n));
644:
645: }
646:
647: public long recursion(int n) {
648:    long value = 0 ;
649:    if(n ==1 || n == 0) {
650:     value = 1;
651:    } else if(n > 1) {
652:     value = n * recursion(n-1);
653:    }
654:    return value;
655: }
656:
657: }
658:
659: 【程序23】   题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?  
660: 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。  
661: public class Ex23 {
662:
663:   static int getAge(int n){
664:    if (n==1){
665:     return 10;
666:    }
667:    return 2 + getAge(n-1);
668:   }
669:   public static void main(String[] args) {
670:    System.out.println("第五个的年龄为:"+getAge(5));
671:   }
672:  }
673: 【程序24】   题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。  
674: import java.util.Scanner;
675: public class Ex24 {
676: public static void main(String[] args) {
677:    Ex24 tn = new Ex24();
678:    Scanner s = new Scanner(System.in);
679:    long a = s.nextLong();
680:    if(a < 0 || a > 100000) {
681:     System.out.println("Error Input, please run this program Again");
682:     System.exit(0);
683:    }
684:     if(a >=0 && a <=9) {
685:     System.out.println( a + "是一位数");
686:     System.out.println("按逆序输出是" + '\n' + a);
687:    } else if(a >= 10 && a <= 99) {
688:     System.out.println(a + "是二位数");
689:     System.out.println("按逆序输出是" );
690:     tn.converse(a);
691:    } else if(a >= 100 && a <= 999) {
692:     System.out.println(a + "是三位数");
693:     System.out.println("按逆序输出是" );
694:     tn.converse(a);
695:    } else if(a >= 1000 && a <= 9999) {
696:     System.out.println(a + "是四位数");
697:     System.out.println("按逆序输出是" );
698:     tn.converse(a);
699:    } else if(a >= 10000 && a <= 99999) {
700:     System.out.println(a + "是五位数");
701:     System.out.println("按逆序输出是" );
702:     tn.converse(a);
703:    }
704: }
705: public void converse(long l) {
706:    String s = Long.toString(l);
707:    char[] ch = s.toCharArray();
708:    for(int i=ch.length-1; i>=0; i--) {
709:     System.out.print(ch[i]);
710:    }
711: }
712: }
713: 【程序25】   题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。  
714: import java.util.Scanner;
715: public class Ex25 {
716: static int[] a = new int[5];
717: static int[] b = new int[5];
718: public static void main(String[] args) {
719:    boolean is =false;
720:    Scanner s = new Scanner(System.in);
721:    long l = s.nextLong();
722:    if (l > 99999 || l < 10000) {
723:     System.out.println("Input error, please input again!");
724:     l = s.nextLong();
725:    }
726:    for (int i = 4; i >= 0; i--) {
727:     a[i] = (int) (l / (long) Math.pow(10, i));
728:     l =(l % ( long) Math.pow(10, i));
729:    }
730:    System.out.println();
731:    for(int i=0,j=0; i<5; i++, j++) {
732:      b[j] = a[i];
733:    }
734:    for(int i=0,j=4; i<5; i++, j--) {
735:     if(a[i] != b[j]) {
736:      is = false;
737:      break;
738:     } else {
739:      is = true;
740:     }
741:    }
742:    if(is == false) {
743:     System.out.println("is not a Palindrom!");
744:    } else if(is == true) {
745:     System.out.println("is a Palindrom!");
746:    }
747: }
748: }
749: 【程序26】   题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续   判断第二个字母。  
750: 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。  
751: import java.util.Scanner;
752: public class Ex26 {
753:  public static void main(String[] args){
754:   //保存用户输入的第二个字母
755:   char weekSecond;
756:   //将Scanner类示例化为input对象,用于接收用户输入
757:   Scanner input = new Scanner(System.in);
758:   //开始提示并接收用户控制台输入
759:   System.out.print("请输入星期值英文的第一个字母,我来帮您判断是星期几:");
760:   String letter = input.next();
761:   //判断用户控制台输入字符串长度是否是一个字母
762:   if (letter.length() == 1){
763:    //利用取第一个索引位的字符来实现让Scanner接收char类型输入
764:    char weekFirst = letter.charAt(0);
765:    switch (weekFirst){
766:   case 'm':
767:      //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
768:     case 'M':
769:       System.out.println("星期一(Monday)");
770:      break;
771:      case 't':
772:      //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
773:     case 'T':
774:       System.out.print("由于星期二(Tuesday)与星期四(Thursday)均以字母T开头,故需输入第二个字母才能正确判断:");
775:      letter = input.next();
776:      //判断用户控制台输入字符串长度是否是一个字母
777:      if (letter.length() == 1){
778:       //利用取第一个索引位的字符来实现让Scanner接收char类型输入
779:       weekSecond = letter.charAt(0);
780:       //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
781:       if (weekSecond == 'U' || weekSecond == 'u'){
782:        System.out.println("星期二(Tuesday)");
783:        break;
784:       //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
785:       } else if (weekSecond == 'H' || weekSecond == 'h'){
786:        System.out.println("星期四(Thursday)");
787:        break;
788:       //控制台错误提示
789:       } else{
790:        System.out.println("输入错误,不能识别的星期值第二个字母,程序结束!");
791:        break;
792:       }
793:      } else {
794:       //控制台错误提示
795:       System.out.println("输入错误,只能输入一个字母,程序结束!");
796:       break;
797:      }
798:     case 'w':
799:      //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
800:     case 'W':
801:      System.out.println("星期三(Wednesday)");
802:      break;
803:     case 'f':
804:      //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
805:     case 'F':
806:      System.out.println("星期五(Friday)");
807:      break;
808:     case 's':
809:      //当输入小写字母时,利用switch结构特性执行下一个带break语句的case分支,以实现忽略用户控制台输入大小写敏感的功能
810:     case 'S':
811:      System.out.print("由于星期六(Saturday)与星期日(Sunday)均以字母S开头,故需输入第二个字母才能正确判断:");
812:      letter = input.next();
813:      //判断用户控制台输入字符串长度是否是一个字母
814:      if (letter.length() == 1){
815:       //利用取第一个索引位的字符来实现让Scanner接收char类型输入
816:       weekSecond = letter.charAt(0);
817:       //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
818:       if (weekSecond == 'A' || weekSecond == 'a'){
819:        System.out.println("星期六(Saturday)");
820:        break;
821:       //利用或(||)运算符来实现忽略用户控制台输入大小写敏感的功能
822:       } else if (weekSecond == 'U' || weekSecond == 'u'){
823:        System.out.println("星期日(Sunday)");
824:        break;
825:       //控制台错误提示
826:       } else{
827:        System.out.println("输入错误,不能识别的星期值第二个字母,程序结束!");
828:        break;
829:       }
830:      } else{
831:       //控制台错误提示
832:       System.out.println("输入错误,只能输入一个字母,程序结束!");
833:       break;
834:      }
835:     default:
836:      //控制台错误提示
837:      System.out.println("输入错误,不能识别的星期值第一个字母,程序结束!");
838:      break;
839:    }
840:   } else{
841:    //控制台错误提示
842:    System.out.println("输入错误,只能输入一个字母,程序结束!");
843:   }
844:  }
845: }
846:
847: 【程序27】   题目:求100之内的素数  
848: public class Ex27 {
849:  public static void main(String args[])
850:  {
851:   int sum,i;
852:   for(sum=2;sum<=100;sum++)
853:   {
854:    for(i=2;i<=sum/2;i++)
855:    {
856:     if(sum%i==0)
857:      break;
858:    }
859:    if(i>sum/2)
860:     System.out.println(sum+"是素数");
861:   }
862:  }
863: }
864: 【程序28】   题目:对10个数进行排序  
865: 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,   下次类推,即用第二个元素与后8个进行比较,并进行交换。  
866: import java.util.Arrays;
867: import java.util.Random;
868: import java.util.Scanner;
869: public class Ex28 {
870:  public static void main(String[] args) {
871:   int arr[] = new int[11];
872:   Random r=new Random();
873:   for(int i=0;i<10;i++){
874:    arr[i]=r.nextInt(100)+1;//得到10个100以内的整数
875:   }
876:   Arrays.sort(arr);
877:   for(int i=0;i<arr.length;i++){
878:    System.out.print(arr[i]+"\t");
879:   }
880:   System.out.print("\nPlease Input a int number: ");
881:   Scanner sc=new Scanner(System.in);
882:   arr[10]=sc.nextInt();//输入一个int值
883:   Arrays.sort(arr);
884:   for(int i=0;i<arr.length;i++){
885:    System.out.print(arr[i]+"\t");
886:   }
887:  }
888: }
889: 【程序29】   题目:求一个3*3矩阵对角线元素之和  
890: 1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。  
891: public class Ex29 {
892:  public static void main(String[] args){
893:  double sum=0;
894:  int array[][]={{1,2,3},{4,5, 6},{7,7,8}};
895:  for(int i=0;i<3;i++)
896:     for(int j=0;j<3;j++){
897:        if(i==j)
898:          sum=sum + array[i][j];
899:     }
900:  System.out.println( sum); 
901:  }
902: }
903: 【程序30】   题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。  
904: 1.   程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。  
905: import java.util.Random;
906: public class ArraySort {
907:   public static void main(String[] args)
908:   {  int temp=0;
909:    int myarr[] = new int[12];
910:    Random r=new Random();
911:    for(int i=1;i<=10;i++)
912:   myarr[i]=r.nextInt(1000);
913:    for (int k=1;k<=10;k++)
914:    System.out.print(myarr[k]+",");
915:    for(int i=1;i<=9;i++)
916:     for(int k=i+1;k<=10;k++)
917:      if(myarr[i]>myarr[k])
918:      {
919:       temp=myarr[i];
920:       myarr[i]=myarr[k];
921:       myarr[k]=temp;
922:      }
923:       System.out.println("");
924:    for (int k=1;k<=10;k++)
925:     System.out.print(myarr[k]+",");
926:  
927:     myarr[11]=r.nextInt(1000);
928:     for(int k=1;k<=10;k++)
929:      if(myarr[k]>myarr[11])
930:      {
931:       temp=myarr[11];
932:       for(int j=11;j>=k+1;j--)
933:        myarr[j]=myarr[j-1];
934:       myarr[k]=temp;
935:      }
936:       System.out.println("");  
937:     for (int k=1;k<=11;k++)
938:      System.out.print(myarr[k]+",");
939:   }
940: }
941:
942: 【程序31】   题目:将一个数组逆序输出。  
943: 程序分析:用第一个与最后一个交换。  
944: 其实,用循环控制变量更简单:
945:     for(int k=11;k>=1;k--)
946:      System.out.print(myarr[k]+",");
947:
948: 【程序32】   题目:取一个整数a从右端开始的4~7位。  
949: 程序分析:可以这样考虑:  
950: (1)先使a右移4位。  
951: (2)设置一个低4位全为1,其余全为0的数。可用~(~0 < <4)  
952: (3)将上面二者进行&运算。 
953:
954: public class Ex32 {
955:   public static void main(String[] args)
956:   {
957:  int a=0;
958:  long b=18745678;
959:  a=(int) Math.floor(b % Math.pow(10,7)/Math.pow(10, 3));
960:  System.out.println(a);
961:   }
962:   }
963: 【程序33】  
964: 题目:打印出杨辉三角形(要求打印出10行如下图)  
965: 1.程序分析:  
966: 1  
967: 1   1  
968: 1   2   1  
969: 1   3   3   1  
970: 1   4   6   4   1  
971: 1   5   10   10   5   1  
972: public class Ex33 {
973:  public static void main(String args[]){
974:      int i,j;
975:      int a[][];
976:      a=new int[8][8];
977:     for(i=0;i<8;i++){
978:        a[i][i]=1;
979:        a[i][0]=1;
980:       }
981:     for(i=2;i<8;i++){
982:      for(j=1;j<=i-1;j++){
983:     a[i][j]=a[i-1][j-1]+a[i-1][j];
984:      }
985:     } 
986:     for(i=0;i<8;i++){
987:     for(j=0;j<i;j++){ 
988:      System.out.printf("  "+a[i][j]);
989:      }
990:     System.out.println();
991:     }
992:    }
993: }
994:
995: 【程序34】   题目:输入3个数a,b,c,按大小顺序输出。  
996: 1.程序分析:利用指针方法。  
997: public class Ex34 {
998:  public static void main(String[] args)
999:  {
1000:  int []arrays = {800,56,500};
1001:  for(int i=arrays.length;--i>=0;)
1002:  {
1003:  for(int j=0;j<i;j++)
1004:  {
1005:  if(arrays[j]>arrays[j+1])
1006:  {
1007:  int temp=arrays[j];
1008:  arrays[j]=arrays[j+1];
1009:  arrays[j+1]=temp;
1010:  }
1011:  }
1012:  }
1013:  for(int n=0;n<arrays.length;n++)
1014:  System.out.println(arrays[n]);
1015:  }
1016:
1017: }
1018: 【程序35】   题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。  
1019: import java.util.*;
1020: public class Ex35 {
1021: public static void main(String[] args) {
1022: int i, min, max, n, temp1, temp2;
1023: int a[];
1024: System.out.println("输入数组的长度:");
1025: Scanner keyboard = new Scanner(System.in);
1026: n = keyboard.nextInt();
1027: a = new int[n];
1028: for (i = 0; i < n; i++) {
1029: System.out.print("输入第" + (i + 1) + "个数据");
1030: a[i] = keyboard.nextInt();
1031: }
1032: //以上是输入整个数组
1033: max = 0;
1034: min = 0;
1035: //设置两个标志,开始都指向第一个数
1036: for (i = 1; i < n; i++) {
1037: if (a[i] > a[max])
1038: max = i; //遍历数组,如果大于a[max],就把他的数组下标赋给max
1039: if (a[i] < a[min])
1040: min = i; //同上,如果小于a[min],就把他的数组下标赋给min
1041: }
1042: //以上for循环找到最大值和最小值,max是最大值的下标,min是最小值的下标
1043: temp1 = a[0];
1044: temp2 = a[min]; //这两个temp只是为了在交换时使用
1045:
1046: a[0] = a[max];
1047: a[max] = temp1; //首先交换a[0]和最大值a[max]
1048:
1049: if (min != 0) { //如果最小值不是a[0],执行下面
1050: a[min] = a[n - 1];
1051: a[n - 1] = temp2; //交换a[min]和a[n-1]
1052: } else {       //如果最小值是a[0],执行下面
1053: a[max] = a[n - 1];
1054: a[n - 1] = temp1;
1055: }
1056:
1057: for (i = 0; i < n; i++) { //输出数组
1058: System.out.print(a[i] + " ");
1059: }
1060: }
1061: }
1062: 【程序36】   题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 
1063:
1064:
1065: 【程序37】  
1066: 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。  
1067: import java.util.Scanner;
1068: public class Ex37 {
1069:  public static void main(String[] args) {
1070:      Scanner s = new Scanner(System.in);
1071:      int n = s.nextInt();
1072:      boolean[] arr = new boolean[n];
1073:      for(int i=0; i<arr.length; i++) {
1074:       arr[i] = true;//下标为TRUE时说明还在圈里
1075:      }
1076:      int leftCount = n;
1077:      int countNum = 0;
1078:      int index = 0;
1079:      while(leftCount > 1) {
1080:       if(arr[index] == true) {//当在圈里时
1081:        countNum ++; //报数递加
1082:        if(countNum == 3) {//报道3时
1083:         countNum =0;//从零开始继续报数
1084:         arr[index] = false;//此人退出圈子
1085:         leftCount --;//剩余人数减一
1086:        }
1087:       }
1088:       index ++;//每报一次数,下标加一
1089:       if(index == n) {//是循环数数,当下标大于n时,说明已经数了一圈,
1090:        index = 0;//将下标设为零重新开始。
1091:       }
1092:      }
1093:      for(int i=0; i<n; i++) {
1094:       if(arr[i] == true) {
1095:        System.out.println(i);
1096:       }
1097:      }
1098:      }
1099: }
1100:
1101: 【程序38】  
1102: 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。  
1103: import java.util.Scanner;
1104: public class Ex38 {
1105: public static void main(String [] args)
1106: {
1107:  Scanner s = new Scanner(System.in);
1108:  System.out.println("请输入一个字符串");
1109:  String mys= s.next();
1110:  System.out.println(str_len(mys));
1111: }
1112:   public static int str_len(String x)
1113:   {
1114:    return x.length();
1115:   }
1116: }
1117:
1118:
1119:  
1120: 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
1121:
1122: 【程序39】 
1123: 题目:字符串排序。 
1124:
1125: import java.util.*;  
1126: public class test{
1127:  public   static   void   main(String[]   args)
1128:  {  
1129:      ArrayList<String> list=new ArrayList<String>();  
1130:      list.add("010101");  
1131:      list.add("010003");  
1132:     list.add("010201");  
1133:     Collections.sort(list);  
1134:   for(int   i=0;i<list.size();i++){  
1135:   System.out.println(list.get(i));  
1136:   }  
1137:   }  
1138:   }
1139:
1140: 【程序40】  
1141: 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? 
1142:
1143: public class Dg {
1144: static int ts=0;//桃子总数
1145: int fs=1;//记录分的次数
1146: static int hs=5;//猴子数...
1147: int tsscope=5000;//桃子数的取值范围.太大容易溢出.
1148: public int fT(int t){
1149: if(t==tsscope){
1150: //当桃子数到了最大的取值范围时取消递归
1151: System.out.println("结束");
1152: return 0;
1153: }
1154: else{
1155: if((t-1)%hs==0 && fs <=hs){
1156: if(fs==hs)
1157: {
1158: System.out.println("桃子数 = "+ts +" 时满足分桃条件");
1159: }
1160:    fs+=1;
1161:    return fT((t-1)/5*4);// 返回猴子拿走一份后的剩下的总数
1162: }
1163: else
1164: {
1165: //没满足条件
1166: fs=1;//分的次数重置为1
1167: return fT(ts+=1);//桃子数加+1
1168: }
1169: }
1170: }
1171: public static void main(String[] args) {
1172: new Dg().fT(0);
1173: }
1174:
1175: }

============================================================================== 我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员。 ==============================================================================
联系我:

分类: JAVA(转)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics