标题:求大神帮我看看,运行之后是没有结果的呢!!
只看楼主
llt2013
Rank: 2
等 级:论坛游民
帖 子:15
专家分:20
注 册:2013-12-28
结帖率:50%
已结贴  问题点数:4 回复次数:8 
求大神帮我看看,运行之后是没有结果的呢!!
标题: 世纪末的星期


    曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。

    还有人称今后的某个世纪末的12月31日,如果是星期一则会....

    有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!

    于是,“谣言制造商”又修改为星期日......

    1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?

    请回答该年份(只写这个4位整数,不要写12月31等多余信息)

import java.awt.Label;


public class T2 {
    public static void main(String [] args){
        String [] a=new String[7];
        int x;
        a[0]="星期六";
        a[1]="星期天";
        a[2]="星期一";
        a[3]="星期二";
        a[4]="星期三";
        a[5]="星期四";
        a[6]="星期五";
        Label:
        for (int i = 2000; i <= 9999;) {//已知1999,12,31是星期五那2000,1,1就是星期六了
            if (i%4==0&&i%100!=0||i%400==0) {//判断那年是闰年还是平年
                x=366%7;
                i++;
                for (int j = 0; j < a.length; j++) {//每次a【0】是那年一月一的星期
                    a[j]=a[(x+j)%7];
                }
                if (i/10%10==0&&i%10==0&&a[0].equals("星期一")) {//如果**00年是星期一,那**99年的年尾就是星期日了,
                    System.out.println(i);
                    break Label;
                }
            }
            else {
                x=365%7;
                i++;
                for (int j = 0; j < a.length; j++) {
                    a[j]=a[(x+j)%7];
                }
                if (i/10%10==0&&i%10==0&&a[0].equals("星期一")) {
                    System.out.println(i);
                    break Label;
                }
            
        }
    }
    }
}
运行之后是没有结果的!!
搜索更多相关主题的帖子: 世界末日 public import 制造商 世纪 
2014-11-30 17:27
小码农
Rank: 9Rank: 9Rank: 9
来 自:大山里
等 级:蜘蛛侠
威 望:7
帖 子:151
专家分:1198
注 册:2014-11-8
得分:2 
楼主啊,你的算法有问题啊。我走了下,当i=2000的时候,2000年是闰年,则x=2,则最终a[0]="星期一",就是说2000年的1月1号就是星期一。跟题目相矛盾啊。
而且你这样算的话,所有的闰年都一样,所有的平年都一样。
我觉得你应该设一个基本点,如1999年的12月31日是星期五,然后求每一个年份最后一天到这个基本点的天数,再计算星期。
以上都是我的看法。

沉淀自己,厚积薄发!
2014-11-30 22:45
llt2013
Rank: 2
等 级:论坛游民
帖 子:15
专家分:20
注 册:2013-12-28
得分:0 
回复 2 楼 小码农
谢谢你肯回复我,真心感谢
当i=2000时,a【0】已经等于星期一了,但此时的i++,让它已经变成2001年了,就是2001年1月1是星期一了,我用了for语句就是不断在更新每年一月一的星期,因为天数不一样闰年和平年还是有差别的吧,你可以大概写些代码给我吗?拜托拜托是菜鸟呢
2014-12-01 20:45
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
得分:2 
String[] weeks = {"星期四","星期五","星期六","星期日","星期一","星期二","星期三"};
         

            int sum = 0;
            int count =-1;
            for (int i = 1999; i <= 9999; i++){//已知1999,12,31是星期五那2000,1,1就是星期六了
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {//判断那年是闰年还是平年
                    sum+=366;
                }
                else {
                    sum+=365;
                }
               

                count++;
                    if(count%100==0){
                        if(sum%7==3)
                            System.out.println(i+"年:"+weeks[sum%7]);
                    }
                       

                     

        }
2014-12-02 12:23
llt2013
Rank: 2
等 级:论坛游民
帖 子:15
专家分:20
注 册:2013-12-28
得分:0 
回复 4 楼 hhwz
崇拜啊,大神,我也去看了很多人写的,我就是郁闷我这样的算法不对吗?我的到底错在哪里了?
2014-12-02 13:32
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
得分:0 
你写的那个思路有点乱 你应该先思考清楚思路 在写代码 在修改
2014-12-02 14:40
llt2013
Rank: 2
等 级:论坛游民
帖 子:15
专家分:20
注 册:2013-12-28
得分:0 
回复 6 楼 hhwz
我的思路,a[0]是表明****年1月1是星期几,我通过for语句不断更新每年1月一的星期,然后因为**99年12月31日是星期日,那我就找**00年一月一是星期一的,此时的a[0]若是星期一就代表了**99年是星期日了,这样思路错了吗?
2014-12-02 20:35
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
得分:0 
你这思路也对 但是你忽略了a这个数组的起点 你2000年用这个a的数组是正确的 2001年还用这个就不对了
你计算1年的 数组也要跟着变
我的思路就是 起点为1999年12月31日 星期5
我是计算总的天数 所以我的这个数组的起点是不变的

2014-12-02 21:17
浩淼
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2014-3-28
得分:2 
第一句for循环语句都写错格式了,第一句If语句是判断一年有多少个星期么?
2014-12-02 22:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-439392-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080037 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved