A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘胜寒   /  2013-5-17 19:27  /  5930 人查看  /  48 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求答案,谢谢
回复 使用道具 举报

周末答题

本帖最后由 student 于 2013-5-22 19:29 编辑
  1. import java.util.Calendar;
  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import java.util.Set;
  5. import java.util.TreeMap;

  6. class Thirteenth {

  7.         // 查表法定义星期数组,星期日是每个星期的第一天
  8.         private static final String[] week = { "星期日", "星期一", "星期二", "星期三", "星期四",
  9.                         "星期五", "星期六" };

  10.         private String key;
  11.         private Integer value;

  12.         public void getTimes(int n) {
  13.                 // 限定n的取值范围
  14.                 if (n < 0 || n > 400) {
  15.                         System.out.println("n的值是一个非负数且不大于400的数");
  16.                         return;
  17.                 }
  18.                 // 创建TreeMap集合对象,采用面向接口的方式
  19.                 Map<String, Integer> tm = new TreeMap<String, Integer>();
  20.                 // 获取日历对象
  21.                 Calendar calendar = Calendar.getInstance();
  22.                 // 计数器
  23.                 int count = 0;
  24.                 // 变量一年的12个月份,0月份代表第一个月
  25.                 for (int i = 0; i < 12; i++) {
  26.                         calendar.set(1900 + n - 1, i, 13);
  27.                         // 获取日历对象中星期,作为成员变量week[]的下标
  28.                         int weekIndex = calendar.get(Calendar.DAY_OF_WEEK);
  29.                         // 星期作为集合的键
  30.                         key = week[weekIndex - 1];
  31.                         // 星期出现的次数作为键值
  32.                         value = tm.get(key);
  33.                         if (!(value == null))
  34.                                 count = value;
  35.                         count++;
  36.                         // 将键值对添加到集合中
  37.                         tm.put(key, count);
  38.                         // 归零,避免本次值加到他键的值上
  39.                         count = 0;
  40.                 }
  41.                 // 打印集合中的元素(键值对)
  42.                 printMap(tm, calendar);
  43.         }

  44.         // 遍历集合
  45.         public void printMap(Map<String, Integer> m, Calendar c) {
  46.                 Set<Map.Entry<String, Integer>> entrySet = m.entrySet();
  47.                 Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();
  48.                 System.out.println(c.get(Calendar.YEAR) + "年的12个月中,13日出现的次数为:");
  49.                 String[] keyValue = new String[week.length];
  50.                 // 遍历集合
  51.                 while (it.hasNext()) {
  52.                         Map.Entry<String, Integer> entry = it.next();
  53.                         String key = entry.getKey();
  54.                         int value = entry.getValue();
  55.                         for (int i = 0; i < week.length; i++) {
  56.                                 if (key != week[i]) {
  57.                                         continue;
  58.                                 }
  59.                                 // 将键值对转换成字符串
  60.                                 keyValue[i] = key + "  " + value + "次";
  61.                         }
  62.                 }
  63.                 // 打印字符串
  64.                 printString(keyValue);
  65.         }

  66.         // 打印字符串
  67.         public void printString(String[] keyValue) {
  68.                 for (int i = 1; i < week.length; i++) {
  69.                         System.out.println(keyValue[i]);
  70.                 }
  71.                 System.out.println(keyValue[0]);
  72.         }
  73. }

  74. // 主函数
  75. public class Demo {
  76.         public static void main(String[] args) {

  77.                 int n = 114;
  78.                 new Thirteenth().getTimes(n);
  79.                 /*
  80.                  * 运行结果:
  81.                  *
  82.                  * 2013年的12个月中,13日出现的次数为:
  83.                  * 星期一 1次
  84.                  * 星期二 1次
  85.                  * 星期三 3次
  86.                  * 星期四 1次
  87.                  * 星期五 2次
  88.                  * 星期六 2次
  89.                  * 星期日 2次
  90.                  */
  91.         }
  92. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
晚了这么久,好歹做出来了还是发一下
  1. class Fri13
  2. {
  3. public static void main(String[] args)
  4.         {
  5.                 int[] result=new int[7];
  6.                 int weekday;
  7.                 for (int year=1900;year<2300;year+=1)
  8.                 {       
  9.                         int s1=365*(year-1900)-((year-1900)/4-1);
  10.                         for (int month=1;month<13;month+=1)
  11.                         {       
  12.                                 int s2=0;
  13.                                 if (year%4==0)       
  14.                                 {
  15.                                         int[] monthday={0,31,29,31,30,31,30,31,31,30,31,30,31};
  16.                                         for (int i=0;i<month-1;i+=1)
  17.                                         s2+=monthday[i];
  18.                                 }
  19.                                 else            
  20.                                 {
  21.                                         int[] monthday={0,31,28,31,30,31,30,31,31,30,31,30,31};
  22.                                         for (int i=0;i<month-1;i+=1)
  23.                                         s2+=monthday[i];
  24.                                 }
  25.                         weekday=(s1+s2+13)%7;
  26.                         result[weekday]+=1;
  27.                         }
  28.                 }
  29.                 System.out.println("从1900到2300年,13号落在每个星期数上的次数:");
  30.                 System.out.println("星期日"+"\t"+"星期一"+"\t"+"星期二"+"\t"+"星期三"+"\t"+"星期四"+"\t"+"星期五"+"\t"+"星期六");
  31.                 System.out.println(result[0]+"\t"+result[1]+"\t"+result[2]+"\t"+result[3]+"\t"+result[4]+"\t"+result[5]+"\t"+result[6]);
  32.         }
  33. }
复制代码

QQ截图20130524142707.jpg (17.08 KB, 下载次数: 0)

算的结果

算的结果

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
  1. import java.util.Calendar;
  2. import java.util.Date;
  3. import java.util.Scanner;

  4. class Demo2{
  5.         public static void main(String[] args)
  6.         {
  7.                 int year = 0;
  8.                 int month = 0;
  9.                 int day = 0;
  10.                 int[] week = new int[7];//定义数组保存13号落在一周内每天的天数
  11.                 Calendar calendar = Calendar.getInstance();//使用Calendar类的static方法getInstance()初始化一个日历对象
  12.                 //calendar.set(1900, 0, 1);//将日期设置为1900年1月1日
  13.                 Scanner input = new Scanner(System.in);
  14.                 int n = input.nextInt();
  15.                 for(year = 1900; year < 1900 + n; year++)//控制年份的变化
  16.                 {
  17.                         for(month = 0; month < 12; month++)//控制月份的变化,0表示一月,11表示十二月
  18.                         {
  19.                                 calendar.set(year, month, 13);//设置当前日期
  20.                                 int weekday = calendar.get(Calendar.DAY_OF_WEEK);//返回当前日期是一星期中的第几天,星期天为1,星期六为7
  21.                                 //System.out.println(weekday);
  22.                                 if(weekday == 1)//入为weekday1即星期天
  23.                                 {
  24.                                         week[6]++;
  25.                                 }
  26.                                 else//当weekday为2时,即星期一weekday[0]加1,为7时weekday即星期五week[5]加1
  27.                                 {
  28.                                         week[weekday - 2]++;
  29.                                 }
  30.                         }
  31.                 }
  32.                 for(int i = 0; i < 7; i++)//循环输出
  33.                 {
  34.                         System.out.print(week[i] + "\t");
  35.                 }
  36.         }
  37. }
复制代码
回复 使用道具 举报
有点深度。。
回复 使用道具 举报
  1. class Huangzhitong
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //定义变量用来记录每个星期出现在13号的次数
  6.                 int x1 = 0;
  7.                 int x2 = 0;
  8.                 int x3 = 0;
  9.                 int x4 = 0;
  10.                 int x5 = 0;
  11.                 int x6 = 0;
  12.                 int x7 = 0;
  13.                
  14.                 int first = 1;//定义一个变量记录每个月1号星期数,初始值为1900年1月1日的星期数
  15.                 int count = 0;//定义一个变量记录每个月13号星期数,初始值为0
  16.                
  17.                 for (int n=1;n<=20;n++)//控制年数
  18.                 {
  19.                         if((n-1)% 4 != 0)//判断是否为闰年 这里得用n-1不能误用n。
  20.                         {
  21.                                 for(int a=1;a<=12;a++)//对每个月的13号和下个月1号进行循环记录
  22.                                 {
  23.                                         count = (first+12)%7;//计算每个月的13日的星期数
  24.                                        
  25.                                        
  26.                                         switch(a)//计算每个月的第一天的星期数
  27.                                         {
  28.                                         case 1 :
  29.                                         case 3 :
  30.                                         case 5 :
  31.                                         case 7:
  32.                                         case 8:
  33.                                         case 10:
  34.                                         case 12:
  35.                                                 first =(31+first)%7;
  36.                                                 break;
  37.                                         case 2:
  38.                                                 first =(28+first)%7;
  39.                                                 break;
  40.                                         case 4 :
  41.                                         case 6 :
  42.                                         case 9 :
  43.                                         case 11 :
  44.                                                 first = (30+first)%7;
  45.                                                 break;
  46.                                         }
  47.                                        
  48.                                         switch(count)//记录13日出现在每个星期的次数
  49.                                         {
  50.                                         case 1:
  51.                                                 x1++;
  52.                                                 break;
  53.                                         case 2:
  54.                                                 x2++;
  55.                                                 break;
  56.                                         case 3:
  57.                                                 x3++;
  58.                                                 break;
  59.                                         case 4:
  60.                                                 x4++;
  61.                                                 break;
  62.                                         case 5:
  63.                                                 x5++;
  64.                                                 break;
  65.                                         case 6:
  66.                                                 x6++;
  67.                                                 break;
  68.                                         case 0:
  69.                                                 x7++;
  70.                                                 break;
  71.                                         }
  72.                                 }
  73.                         }
  74.                         else
  75.                         {
  76.                                 for(int a=1;a<=12;a++)
  77.                                 {
  78.                                         count = (first+12)%7;
  79.                                        
  80.                                        
  81.                                         switch(a)
  82.                                         {
  83.                                         case 1 :
  84.                                         case 3 :
  85.                                         case 5 :
  86.                                         case 7:
  87.                                         case 8:
  88.                                         case 10:
  89.                                         case 12:
  90.                                                 first =(31+first)%7;
  91.                                                 break;
  92.                                         case 2:
  93.                                                 first =(29+first)%7;
  94.                                                 break;
  95.                                         case 4 :
  96.                                         case 6 :
  97.                                         case 9 :
  98.                                         case 11 :
  99.                                                 first = (30+first)%7;
  100.                                                 break;
  101.                                         }
  102.                                        
  103.                                         switch(count)
  104.                                         {
  105.                                         case 1:
  106.                                                 x1++;
  107.                                                 break;
  108.                                         case 2:
  109.                                                 x2++;
  110.                                                 break;
  111.                                         case 3:
  112.                                                 x3++;
  113.                                                 break;
  114.                                         case 4:
  115.                                                 x4++;
  116.                                                 break;
  117.                                         case 5:
  118.                                                 x5++;
  119.                                                 break;
  120.                                         case 6:
  121.                                                 x6++;
  122.                                                 break;
  123.                                         case 0:
  124.                                                 x7++;
  125.                                                 break;
  126.                                         }
  127.                                 }
  128.                         }
  129.                 }
  130.                
  131.                
  132.                
  133.                
  134.                 System.out.println("13日落在星期一次数"+x1);
  135.                 System.out.println("13日落在星期二次数"+x2);
  136.                 System.out.println("13日落在星期三次数"+x3);
  137.                 System.out.println("13日落在星期四次数"+x4);
  138.                 System.out.println("13日落在星期五次数"+x5);
  139.                 System.out.println("13日落在星期六次数"+x6);
  140.                 System.out.println("13日落在星期七次数"+x7);
  141.                
  142.         }
  143. }
复制代码
回复 使用道具 举报
  1. class Huangzhitong
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //定义变量用来记录每个星期出现在13号的次数
  6.                 int x1 = 0;
  7.                 int x2 = 0;
  8.                 int x3 = 0;
  9.                 int x4 = 0;
  10.                 int x5 = 0;
  11.                 int x6 = 0;
  12.                 int x7 = 0;
  13.                
  14.                 int first = 1;//定义一个变量记录每个月1号星期数,初始值为1900年1月1日的星期数
  15.                 int count = 0;//定义一个变量记录每个月13号星期数,初始值为0
  16.                
  17.                 for (int n=1;n<=20;n++)//控制年数
  18.                 {
  19.                         if(n% 4 != 0)//判断是否为闰年 这里得用n-1不能误用n。
  20.                         {
  21.                                 for(int a=1;a<=12;a++)//对每个月的13号和下个月1号进行循环记录
  22.                                 {
  23.                                         count = (first+12)%7;//计算每个月的13日的星期数
  24.                                        
  25.                                        
  26.                                         switch(a)//计算每个月的第一天的星期数
  27.                                         {
  28.                                         case 1 :
  29.                                         case 3 :
  30.                                         case 5 :
  31.                                         case 7:
  32.                                         case 8:
  33.                                         case 10:
  34.                                         case 12:
  35.                                                 first =(31+first)%7;
  36.                                                 break;
  37.                                         case 2:
  38.                                                 first =(28+first)%7;
  39.                                                 break;
  40.                                         case 4 :
  41.                                         case 6 :
  42.                                         case 9 :
  43.                                         case 11 :
  44.                                                 first = (30+first)%7;
  45.                                                 break;
  46.                                         }
  47.                                        
  48.                                         switch(count)//记录13日出现在每个星期的次数
  49.                                         {
  50.                                         case 1:
  51.                                                 x1++;
  52.                                                 break;
  53.                                         case 2:
  54.                                                 x2++;
  55.                                                 break;
  56.                                         case 3:
  57.                                                 x3++;
  58.                                                 break;
  59.                                         case 4:
  60.                                                 x4++;
  61.                                                 break;
  62.                                         case 5:
  63.                                                 x5++;
  64.                                                 break;
  65.                                         case 6:
  66.                                                 x6++;
  67.                                                 break;
  68.                                         case 0:
  69.                                                 x7++;
  70.                                                 break;
  71.                                         }
  72.                                 }
  73.                         }
  74.                         else
  75.                         {
  76.                                 for(int a=1;a<=12;a++)
  77.                                 {
  78.                                         count = (first+12)%7;
  79.                                        
  80.                                        
  81.                                         switch(a)
  82.                                         {
  83.                                         case 1 :
  84.                                         case 3 :
  85.                                         case 5 :
  86.                                         case 7:
  87.                                         case 8:
  88.                                         case 10:
  89.                                         case 12:
  90.                                                 first =(31+first)%7;
  91.                                                 break;
  92.                                         case 2:
  93.                                                 first =(29+first)%7;
  94.                                                 break;
  95.                                         case 4 :
  96.                                         case 6 :
  97.                                         case 9 :
  98.                                         case 11 :
  99.                                                 first = (30+first)%7;
  100.                                                 break;
  101.                                         }
  102.                                        
  103.                                         switch(count)
  104.                                         {
  105.                                         case 1:
  106.                                                 x1++;
  107.                                                 break;
  108.                                         case 2:
  109.                                                 x2++;
  110.                                                 break;
  111.                                         case 3:
  112.                                                 x3++;
  113.                                                 break;
  114.                                         case 4:
  115.                                                 x4++;
  116.                                                 break;
  117.                                         case 5:
  118.                                                 x5++;
  119.                                                 break;
  120.                                         case 6:
  121.                                                 x6++;
  122.                                                 break;
  123.                                         case 0:
  124.                                                 x7++;
  125.                                                 break;
  126.                                         }
  127.                                 }
  128.                         }
  129.                 }
  130.                
  131.                
  132.                
  133.                
  134.                 System.out.println("13日落在星期一次数"+x1);
  135.                 System.out.println("13日落在星期二次数"+x2);
  136.                 System.out.println("13日落在星期三次数"+x3);
  137.                 System.out.println("13日落在星期四次数"+x4);
  138.                 System.out.println("13日落在星期五次数"+x5);
  139.                 System.out.println("13日落在星期六次数"+x6);
  140.                 System.out.println("13日落在星期七次数"+x7);
  141.                
  142.         }
  143. }
复制代码
回复 使用道具 举报
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 Test test=new Test();
  4.                 //从控制获取数据
  5.                 Scanner in=new Scanner(System.in);
  6.                 while (true) {
  7.                         //n是一个非负数且不大于400.
  8.                         int num=in.nextInt();
  9.                         if(num<0||num>=400){
  10.                                 System.err.println("输入的数据必须是是一个非负数且不大于400的数");
  11.                                 continue;
  12.                         }
  13.                         test.print_data(num);
  14.                 }
  15.                
  16.         }
  17.         public void print_data(int year_num){
  18.                
  19.                 Calendar cale = Calendar.getInstance();
  20.                 Calendar cale2 = Calendar.getInstance();
  21.                 //0代表的是1月···
  22.                 int week_day[]=new int[7];
  23.                 //设置开始时间0表示1月,以此类推
  24.                 cale.set(1900, 0, 13);
  25.                 //设置结束时间
  26.                 cale2.set(1900+year_num, 11, 13);
  27.                 // 获取这天是周几,但要注意,周日是1,周六是7
  28.                 //每个只有一个13号  所以每次加1个月
  29.                 for (cale.get(Calendar.YEAR); cale.get(Calendar.YEAR)<=cale2.get(Calendar.YEAR);cale.add(Calendar.MONTH,1)) {
  30.                         int i=cale.get(Calendar.DAY_OF_WEEK);
  31.                         week_day[i-1]++;
  32.                 }
  33.                 String[] weeks = { "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
  34.                 for (int i = 0; i < week_day.length; i++) {
  35.                         int data_num = week_day[i];
  36.                         System.out.println(weeks[i]+"的天数有:"+data_num);
  37.                 }
  38.         }
  39. }
复制代码
回复 使用道具 举报
默默的赞一个 我现在的基础还不能做这些题啊
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马