SKY外语计算机学习

标题: 几道java题,感兴趣的朋友可以瞧一瞧 [打印本页]

作者: 流氓    时间: 2012-5-23 12:55
标题: 几道java题,感兴趣的朋友可以瞧一瞧
本帖最后由 sky_yx 于 2015-12-30 14:11 编辑

一、N阶螺旋矩阵。
1   2   3   4
12  13  14  5
11  16  15  6
10  9   8   7
  1. package com.etop.arrays;
  2. public class Test {
  3. int[][]arr=new int[4][4];
  4. int i=0;
  5. int j=0;
  6. int num=1;
  7. public void spire(){
  8.   if(arr.length!=1){
  9.    Direction dir=Direction.RIGHT;
  10.    while(arr[i][j]==0){
  11.     arr[i][j]=num++;
  12.     switch(dir){
  13.     case RIGHT:
  14.      if((j+1<arr[0].length)&&(arr[i][j+1]==0)){
  15.       j++;
  16.      }else{
  17.       i++;
  18.       dir=Direction.DOWN;
  19.      }
  20.      break;
  21.     case DOWN:
  22.      if((i+1<arr.length)&&(arr[i+1][j]==0)){
  23.       i++;
  24.      }else{
  25.       j--;
  26.       dir=Direction.LEFT;
  27.      }
  28.      break;
  29.     case LEFT:
  30.      if((j-1>=0)&&(arr[i][j-1]==0)){
  31.       j--;
  32.      }else{
  33.       i--;
  34.       dir=Direction.UP;
  35.      }
  36.      break;
  37.     case UP:
  38.      if((i-1>=0)&&(arr[i-1][j])==0){
  39.       i--;
  40.      }else{
  41.       j++;
  42.       dir=Direction.RIGHT;
  43.      }
  44.      break;
  45.     }
  46.    }
  47.     print(arr);
  48.    }else
  49.     System.out.println(1);
  50.   }
  51.   public static void print(int[][] arr){
  52.    for(int i=0;i<arr.length;i++){
  53.     for(int j=0;j<arr[0].length;j++){
  54.      System.out.println(arr[i][j]+"\t");
  55.     }
  56.     System.out.println();
  57.    }
  58.   }
  59.   public enum Direction{
  60.    RIGHT,DOWN,LEFT,UP
  61.   }
  62. public static void main(String[] args) {
  63.   Test t=new Test();
  64.   t.spire();
  65.   
  66. }
  67. }
复制代码
二、编写一个java程序,按以下数字规律形成二维数组,并输出。
1  2  9  10  25
4  3  8  11  24
5  6  7  12  23
16 15 14 13  22
17 18 19 20  21
  1. import java.util.Scanner;
  2. public class Test {
  3. public static void main(String[] args) {
  4.   int n=7;
  5.   Scanner s=new Scanner(System.in);
  6.   System.out.print("输入大小N:");
  7.   n=s.nextInt();
  8.   System.out.println();
  9.   for(int y=0;y<n;y++){   
  10.    int yr=(y+1)%2;//1 0 1 0 1 0 1
  11.    int ye=(y+1)/2*2;//0 2 2 4 4 6 6
  12.    for(int x=0;x<n;x++){   
  13.     //(e+1)^2 (e+1)^+1 (e+1)^2
  14.     int xr=x%2;
  15.     int xe=x/2*2+1;   
  16.     System.out.format("%5d",
  17.      (x>y? (xe*xe+xr+y*(xr==0?-1:1)):(ye*ye+yr+x*(yr==0?-1:1)))
  18.     );  
  19.    }
  20.    System.out.println();
  21.   }
  22. }
  23. }
复制代码
三、模拟多人排队买球票,设球票5元一张,购票者持5元的,有持10元的,有持20元的,有持50元的,持5元的可以立即购买,持10元的如果有5元零钱就要可以直接买并找零,否则进入旁边等待通道等待,同理50元的也如此,如果无法找零,到旁边通道的最末等待,已知排队者持钱情况序列为{10,5,20,5,5,20,10,5,5,50,5,5,20,5,5,10,5,20,5,20},试给出排队购票情况。
  1. package com.etop.lianxi;
  2. import java.util.LinkedList;
  3. import java.util.Vector;
  4. public class Test1 {
  5.   
  6.   public static void main(String[] args){
  7.    int[] persons = new int[]{10,5,20,5,5,20,10,5,5,50,5,5,20,5,5,10,5,20,5,20};
  8.    MyQueue queue = new MyQueue();
  9.    
  10.    //全部人入队列
  11.    for (int i=0; i<persons.length;i++){
  12.     queue.enqueue(new Buyer(i, persons[i]));
  13.    }
  14.    //收到的钱
  15.    LinkedList<Integer> changeQueue = new LinkedList<Integer>();
  16.    //每个人循环两次,或者所有的人都买到票
  17.    for (int i=0;i<40 && !queue.isEmpty();i++){
  18.     //出队列
  19.     Buyer buyer = queue.dequeue();
  20.     int money = buyer.money;
  21.     //5元直接买
  22.     if (money == 5) {
  23.      System.out.printf("%d号买到,不需要找零\n", buyer.index);
  24.      changeQueue.addLast(new Integer(5));
  25.     //用收到的钱找零
  26.     }else{
  27.      LinkedList<Integer> change = getChange(changeQueue, money - 5);
  28.      //找不开
  29.      if (change == null) {
  30.       System.out.printf("%d号用%d元钱,没有找零,等待\n", buyer.index, money);
  31.       queue.enqueue(buyer);
  32.      //找零
  33.      }else{
  34.       System.out.printf("%d号用%d元钱买,找零%s\n", buyer.index, money, change.toString());
  35.       changeQueue.addLast(new Integer(money));
  36.      }
  37.     }
  38.     sort(changeQueue);
  39.     System.out.println("收到的钱:" + changeQueue.toString());
  40.    }
  41.    //打印没有买到票的人的信息
  42.    for (Buyer buyer:queue){
  43.     System.out.println(buyer.index + "拿"+buyer.money+"元买,没有买到票");
  44.    }
  45.    //打印收到的钱的信息
  46.    System.out.println("最后收到的钱:" + changeQueue);
  47.    
  48.   }
  49.   
  50.   //从change里面找零,比方getChange([10,10,5,5,5], 25)返回[10,10,5]
  51.   //getChange([10,10,5,5,5], 27)返回null
  52.   public static LinkedList<Integer> getChange(LinkedList<Integer> change, int money){
  53.    //System.out.println(change + "\t" + money);
  54.    LinkedList<Integer> past = new LinkedList<Integer>();
  55.    LinkedList<Integer> buff = new LinkedList<Integer>();
  56.    while (true){
  57.     if (money == 0) {
  58.      change.addAll(buff);
  59.      sort(change);
  60.      return past;
  61.     }
  62.     if (change.isEmpty()) break;
  63.     int i = change.remove().intValue();
  64.     if (money>=i){
  65.      money -= i;
  66.      past.add(new Integer(i));
  67.     }else{
  68.      buff.addFirst(new Integer(i));
  69.     }
  70.    }
  71.    change.addAll(past);
  72.    change.addAll(buff);
  73.    sort(change);
  74.    //for (int i=0;i<change.size();i++) System.out.println(change.get(i) + " ");
  75.    return null;
  76.   }
  77.   //对LinkedList排序,从大到小
  78.   public static void sort(LinkedList<Integer> l){
  79.    for (int i=0;i<l.size();i++){
  80.     for (int j=i+1;j<l.size();j++){
  81.      if (l.get(i) < l.get(j)){
  82.       Integer n = l.get(i);
  83.      }
  84.     }
  85.    }
  86.   }
  87.    
  88. }
  89. class MyQueue extends Vector<Buyer>{
  90.   
  91.   //出队列操作
  92.   public Buyer dequeue(){
  93.    if (isEmpty()) return null;
  94.    return remove(0);
  95.   }
  96.   public boolean isEmpty() {
  97.   // TODO Auto-generated method stub
  98.   return false;
  99. }
  100. //入队列操作
  101.   public void enqueue(Buyer buyer){
  102.    add(buyer);
  103.   }
  104. }
  105. class Buyer{
  106.   //序号
  107.   public int index;
  108.   //钱
  109.   public int money;
  110.   public Buyer(int index, int money){
  111.    this.index = index;
  112.    this.money = money;
  113.   }
  114. }
复制代码
四、试利用java.util.Date类继承声明MyDate类,使MyDate类增加以下功能:增加1天、增加1月和增加1年的方法;输出MyDate对象日期的方法;求两个MyDate对象日期差的方法;提供能用当前日期初始化MyDate类对象的构造方法。同时编写应用程序能实现对MyDate对象的测试。
  1. package com.etop.date;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.GregorianCalendar;
  6. public class CalendarExample {
  7.   private static void prt(String s) {
  8.   System.out.println(s);
  9. }
  10. private static void prt() {
  11.   System.out.println();
  12. }
  13. private static void doCalendarTimeExample() {
  14.   prt("CURRENT DATE/TIME");
  15.   prt("=================================================================");
  16.   Date now = Calendar.getInstance().getTime();
  17.   prt("  Calendar.getInstance().getTime() : " + now);
  18.   prt();
  19. }
  20. private static void doSimpleDateFormat() {
  21.   prt("SIMPLE DATE FORMAT");
  22.   prt("=================================================================");
  23.   Calendar now = Calendar.getInstance();
  24.   SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
  25.   prt("  It is now : " + formatter.format(now.getTime()));
  26.   prt();
  27. }
  28.   private static void doAdd() {
  29.   prt("ADD / SUBTRACT CALENDAR / DATEs");
  30.   prt("=================================================================");
  31.   Calendar now = Calendar.getInstance();
  32.   Calendar working;
  33.   SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
  34.   working = (Calendar) now.clone();
  35.   working.add(Calendar.DAY_OF_YEAR, -(365 * 2));
  36.   prt("  Two years ago it was: " + formatter.format(working.getTime()));
  37.   working = (Calendar) now.clone();
  38.   working.add(Calendar.DAY_OF_YEAR, +5);
  39.   prt("  In five days it will be: " + formatter.format(working.getTime()));
  40.   prt();
  41. }
  42. private static void doDateDifference() {
  43.   prt("DIFFERENCE BETWEEN TWO DATES");
  44.   prt("=================================================================");
  45.   Date startDate1 = new GregorianCalendar(1994, 02, 14, 14, 00).getTime();
  46.   Date endDate1 = new Date();
  47.   long diff = endDate1.getTime() - startDate1.getTime();
  48.   prt("  Difference between " + endDate1);
  49.   prt("  and " + startDate1 + " is " + (diff / (1000L * 60L * 60L * 24L)) + " days.");
  50.   prt();
  51. }
  52. private static void doGetMethods() {
  53.   prt("CALENDAR GET METHODS");
  54.   prt("=================================================================");
  55.   Calendar c = Calendar.getInstance();
  56.   prt("  YEAR                 : " + c.get(Calendar.YEAR));
  57.   prt("  MONTH                : " + c.get(Calendar.MONTH));
  58.   prt("  DAY_OF_MONTH         : " + c.get(Calendar.DAY_OF_MONTH));
  59.   prt("  DAY_OF_WEEK          : " + c.get(Calendar.DAY_OF_WEEK));
  60.   prt("  DAY_OF_YEAR          : " + c.get(Calendar.DAY_OF_YEAR));
  61.   prt("  WEEK_OF_YEAR         : " + c.get(Calendar.WEEK_OF_YEAR));
  62.   prt("  WEEK_OF_MONTH        : " + c.get(Calendar.WEEK_OF_MONTH));
  63.   prt("  DAY_OF_WEEK_IN_MONTH : " + c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
  64.   prt("  HOUR                 : " + c.get(Calendar.HOUR));
  65.   prt("  AM_PM                : " + c.get(Calendar.AM_PM));
  66.   prt("  HOUR_OF_DAY (24-hour): " + c.get(Calendar.HOUR_OF_DAY));
  67.   prt("  MINUTE               : " + c.get(Calendar.MINUTE));
  68.   prt("  SECOND               : " + c.get(Calendar.SECOND));
  69.   prt();
  70. }
  71. public static void main(String[] args) {
  72.   prt();
  73.   doCalendarTimeExample();
  74.   doSimpleDateFormat();
  75.   doAdd();
  76.   doDateDifference();
  77.   doGetMethods();
  78. }
  79. }
复制代码



作者: rogan    时间: 2012-5-23 14:15
这个不错,代码加了[code][/code]看起来会不会好点?
作者: 流氓    时间: 2012-5-23 22:06
本帖最后由 sky_yx 于 2015-12-30 14:11 编辑

这个不错,代码加了[code][/code]看起来会不会好点?[/quote]
好的,谢了






欢迎光临 SKY外语计算机学习 (http://join.skywj.com/) Powered by Discuz! X2.5