黑马程序员技术交流社区

标题: 卡在入学考试 [打印本页]

作者: 吕柳根    时间: 2013-6-29 21:02
标题: 卡在入学考试
本帖最后由 吕柳根 于 2013-6-30 14:19 编辑

10、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。????????
鄙人学的很浅,以为这道不难,写着写着就不知道怎么做了,求高手帮忙,谢谢
作者: nilaoyededie    时间: 2013-6-29 21:08
获取年月日
1,年、判断是否是闰年,就是判断2月是否有29
2,月、累加前面几个月的天数
3,日、加几天上就是了
这是我的思路,可以参考,程序你自己写!
作者: 吕柳根    时间: 2013-6-29 21:16
nilaoyededie 发表于 2013-6-29 21:08
获取年月日
1,年、判断是否是闰年,就是判断2月是否有29
2,月、累加前面几个月的天数

关键是怎么判断星期,,,这个怎么解决???
作者: sym544135698    时间: 2013-6-29 21:20
星期几怎么办?天数的话就是那样,话说活动的一个题目就是求天数,不过是星期几的话还真不知道,求解
作者: 吕柳根    时间: 2013-6-29 21:23
sym544135698 发表于 2013-6-29 21:20
星期几怎么办?天数的话就是那样,话说活动的一个题目就是求天数,不过是星期几的话还真不知道,求解 ...

恩,是啊,等高手来解答
作者: nilaoyededie    时间: 2013-6-29 21:25
找一个某一年的一天作为标准 来计算!
能算出来是一年的第几天就能算出来距离这天有多少天!
作者: 吕柳根    时间: 2013-6-29 21:33
nilaoyededie 发表于 2013-6-29 21:25
找一个某一年的一天作为标准 来计算!
能算出来是一年的第几天就能算出来距离这天有多少天! ...

这,应该写起来比较复杂……………………好吧,听说入学考试的题目都是好简单的,这应该有更好的方法来解答吧
作者: 乘鱼飞    时间: 2013-6-29 21:43
贴吧里有,我以前见过
作者: 逆_水_寒    时间: 2013-6-29 21:50
我还没入学考试来,才学习十几天的视频,刚写好笔记。
看到你这题我也挺纠结的,给你点建议,只是我能想到的东西:2000年是闰年,看看输入的年份减2000,不为4的倍数绝对不是闰年,为4的倍数可能是闰年。
比如2017,距离2000是17年,除以4是等于4余1,假设2000年1月1日是星期一,365+365+365+366(三个平年一个闰年)乘以4,因为2000到2017过了4个整循环,上面乘积除以7余数看余数,假设余数2,是那么2017年1月1日就是星期三,然后再做后面的。

初学只是太少,硬做这题,只能用这种的办法,痛苦。以后学多了有更好的方法就好了。
作者: 逆_水_寒    时间: 2013-6-29 21:57
初学者知识太少,上面那方法不严谨的地方在于,2100年不是闰年,四年一闰到整百的年份又不润了,如果是输入2101年,四年一润在2100处可能就会出错了吧。。。
作者: 逆_水_寒    时间: 2013-6-29 22:03
晕,写完了我才想起来,怎么自己的脑子也转不过弯了,丢人了。。。。。

假设2000年1月1日是星期一,看看那个日期距离2000年1月1日有多少天%7的余数加上1(也就是加上星期一)不就是那一天的星期么。。。
作者: nilaoyededie    时间: 2013-6-29 22:33
  1. <p>using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace 123654
  6. {
  7.     class Program
  8.     {

  9.         static void Main(string[] args)
  10.         {
  11.             while (true)
  12.             {
  13.                 Console.WriteLine("请按XXX-XX-XX输入年月日");
  14.                 string str = Console.ReadLine();
  15.                 char[] chs = { '-' };
  16.                 string[] strs = str.Split(chs, StringSplitOptions.RemoveEmptyEntries);
  17.                 int year, month, date, day = 0;//day计算天数
  18.                 int.TryParse(strs[0], out year);
  19.                 int.TryParse(strs[1], out month);
  20.                 int.TryParse(strs[2], out date);
  21.                 int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
  22.                 if ((year %4 == 0 && year %100 != 0 || year %400 == 0)&&month>2)
  23.                     day += 1;
  24.                 for (int i = 0; i < month - 1; i++)
  25.                     day += months[i];
  26.                 day += date;
  27.                 Console.WriteLine(day);//以2000年1月1日为标准 这天为星期六
  28.                 int week = Math.Abs(year - 2000);
  29.                 int j, k=0;
  30.                 if (year < 2000)
  31.                 {
  32.                     for (j = year; j < 2000 ; j++) ;
  33.                     if (j%4 == 0 && year % 100 != 0 || year% 400 == 0)
  34.                         k++;
  35.                     week = ((2000 - year)*365+1 + day + k) / 7;
  36.                 }
  37.                 if (year >= 2000)
  38.                 {
  39.                     for (j = 2000; j <year; j++)
  40.                     if ((j % 4 == 0 && year % 100 != 0 || year % 400 == 0) && month > 2)
  41.                         k++;
  42.                     week = ((year-2000 ) * 365 + 4+ day + k) %7;
  43.                 }
  44.                
  45.                 Console.WriteLine("今天是星期" + (week+1));
  46.                 Console.ReadKey();
  47.             }
  48.         }
  49.     }
  50. }</p><p> </p>
复制代码
没写注释!!!!!!!!!!!!

作者: 高腾    时间: 2013-6-29 23:34
由于是入学考试题 完整代码不能写,可以给你点提示
首先获取当前日期是星期几
string weekday = Datetime.Today.DayOfWeek.Tostring();
然后将输入的日期与当前日期相减并获得两个日期间隔的天数
TimeSpan ts = DateTime1 - DateTime2;
ts.Days;获取天数
用天数取余7 得到余数就能知道是星期几了
至于第几天 上面的方法可行 只用简单的判断下是否为闰年 闰年,当月份大于2加1就行
作者: 逆_水_寒    时间: 2013-6-30 08:23
高腾 发表于 2013-6-29 23:34
由于是入学考试题 完整代码不能写,可以给你点提示
首先获取当前日期是星期几
string weekday = Datetime.T ...

string weekday = Datetime.Today.DayOfWeek.Tostring();

若用控制台程序,using  后面+什么可以引用 Datetime  ?
作者: 逆_水_寒    时间: 2013-6-30 09:37
高腾 发表于 2013-6-29 23:34
由于是入学考试题 完整代码不能写,可以给你点提示
首先获取当前日期是星期几
string weekday = Datetime.T ...

string weekday = Datetime.Today.DayOfWeek.Tostring();

这个Datetime里的t应该大写,Datetime在我那里一直显示 红杠杠 ,我还以为不能引用的,原来是没写对,
你基础真的很好,,,,初学者要努力了。。。
作者: ◇゛ 仅此而以    时间: 2013-6-30 11:12
   这个很简单 。
  1  。当前天数 。 DateTime.Now.DayOfYear  .
  2 ,  星期数 :   string   day =  Enum.GetNames(typeof(DayOfWeek))[(int)DateTime.Now.DayOfWeek];
作者: 菜鸟励志要逆袭    时间: 2013-6-30 14:53
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test2
{
    class Program
    {//输入某年某月某日,判断这一天是这一年的第几天?
        static void Main(string[] args)
        {
            int[] a={31,29,31,30,31,30,31,31,30,31,30,31};//闰年各月的天数
            int[] b={31,28,31,30,31,30,31,31,30,31,30,31};//平年各月的天数
            string input;
            int[] data = new int[3];
            int temp=0;
            Console.WriteLine("请您输入某年某月某日:");
            input = Console.ReadLine();
            DateTime time = DateTime.Parse(input);//把 用户输入的字符串转换成日期
            data[0] = time.Year;
            data[1] = time.Month;
            data[2] = time.Day;
            if((data[0]%400==0)||((data[0]%4==0)&&(data[0]%100!=0)))//判断是否为闰年
            {
                for(int i=0;i<data[1]-1;i++)
                {
                    temp+=a[i];
                }
                Console.WriteLine("您输入的年月日时这年的第{0}天",temp+data[2]);
            }
            else{
                for(int j=0;j<data[1]-1;j++)
                {
                    temp+=b[j];
                }
                Console.WriteLine("您输入的年月日时这年的第{0}天",temp+data[2]);
            }
            Console.ReadLine();
        }
    }
}

作者: 崔龙飞    时间: 2013-8-19 19:32
我汗,我是基础测试遇到这个题了。还好没到入学测试,想来大半天,楼主现在如何了,如果已解决,麻烦能不能给份答案我看看。他们的代码都看不懂什么意思
作者: 黑骏马    时间: 2013-8-28 20:58
亲们,你们不知道有位有问必答的大神叫百度吗?
计算某一天是星期几,有几个通用公式的,百度一下就知道了。

蔡勒公式

百科名片

蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2