工大在线

标题: 西工“探索杯”编程大赛比赛样题 [打印本页]

作者: bigice803    时间: 2008-4-7 13:42
标题: 西工“探索杯”编程大赛比赛样题
中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

*问题分析与算法设计
根据题意可以将解题过程分为三步:
1)计算从1990年1月1日开始至指定日期共有多少天;
2)由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除;
3)根据余数判断他是在“打鱼”还是在“晒网”;
若 余数为1,2,3,则他是在“打鱼”
否则 是在“晒网”
在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:
如果 ((年能被4除尽 且 不能被100除尽)或 能被400除尽)
则 该年是闰年;
否则 不是闰年。
C语言中判断能否整除可以使用求余运算(即求模)

*程序说明与注释
#include<stdio.h>
int days(struct date day);
struct date{
int year;
int month;
int day;
};

int main()
{
struct date today,term;
int yearday,year,day;
printf("Enter year/month/day:");
scanf("%d%d%d",&today.year,&today.month,&today.day); /*输入日期*/
term.month=12; /*设置变量的初始值:月*/
term.day=31; /*设置变量的初始值:日*/
for(yearday=0,year=1990;year<today.year;year++)
{
term.year=year;
yearday+=days(term); /*计算从1990年至指定年的前一年共有多少天*/
}
yearday+=days(today); /*加上指定年中到指定日期的天数*/
day=yearday%5; /*求余数*/
if(day>0&&day<4) printf("he was fishing at that day.\n"); /*打印结果*/
else printf("He was sleeping at that day.\n");
}

int days(struct date day)
{
static int day_tab[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
{0,31,29,31,30,31,30,31,31,30,31,30,31,},
};
int i,lp;
lp=day.year%4==0&&day.year%100!=0||day.year%400==0;
/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
for(i=1;i<day.month;i++) /*计算本年中自1月1日起的天数*/
day.day+=day_tab[lp];
return day.day;
}

此题难度同比稍大些[s:30] 计算机学院科协在食堂门口等着大家的到来。[s:19] [s:19]
作者: lichao_2007    时间: 2008-4-7 13:43
呵呵~
作者: dixnuits    时间: 2008-4-7 16:21
晕 这都算难度大?

看看ACM吧

这程序我20分钟足够
作者: liu19880426    时间: 2008-4-7 18:15
高手!参赛啊!能满足你的要求的哦
作者: lichao_2007    时间: 2008-4-7 21:02
我关心的是奖项是什么?!~呵呵~如果是RMB,那我就参加了哈~[s:35] [s:35] [s:31] [s:31] [s:31]
作者: lichao_2007    时间: 2008-4-7 21:07
行了,不管发什么,我都参加了!好坏也要对得起俺们的帆哥啊!~他可是我的程序老师啊!~
作者: bigice803    时间: 2008-4-9 19:34
标题: 回复 6楼 的帖子
是的是的!!
证明自己才是最重要的!![s:19]
作者: liu19880426    时间: 2008-4-9 21:47
[s:38] [s:38]
作者: 我爱男男    时间: 2008-4-10 11:24
也就一般吧。。。
没有参加的必要了。。。。
作者: bigice803    时间: 2008-4-10 21:08
标题: 回复 9楼 的帖子
同学:
  
  要是你有编程的特长,您可以杀到决赛和我们计算机学院的余老师、乔老师出的题过过招!看看你到底强还是弱,在这儿说不是好汉!!
  
  还有就是同学你真的是强人,那么就参加,我们明天还能报名一天,你要是真是厉害,我们从比赛中寻找的就是你,我们还等着你给咱们学校拿回来一次Acm的奖杯呢。想要做难题先看看还有没有比你更厉害的同学。

要是同学你不是一个眼高手低的人,要是你真的有实力,那请你加入到这次活动中;这个样题是很简单,可是要是难了是不是你又要说题太难了,自己不会??这次活动的主要目的还要给更高级的比赛输送人才,请又能力的你不要隐匿自己的才能,通过这次活动不仅给自己一个机会,还有可能给咱们学校增加荣誉,何乐而不为呢。
  
  我们这次并不是形式主义,这点请你放心,我们是在尽自己最大努力来做;科协成立了也只有二年,肯定会有经验欠缺的地方,要是有什么不足请你多指教。你要不是在这儿发泄的过客,而是一个隐匿的高手,请你参加这次比赛,明天我们还有一下午的报名时间。
  
要是你错过了报名的时间,我的邮箱是xait111@163.com,你把你的姓名、学号、系别、宿舍号、联系方式、用什么语言编程,把这些发给我,我帮你报名。你需要的软件我帮你在机房里面装。

谢谢!!
[s:39] [s:33]

[ 本帖最后由 bigice803 于 2008-4-10 22:07 编辑 ]
作者: liu19880426    时间: 2008-4-11 15:12
[s:38] [s:31]
作者: 疯人院里一青年    时间: 2008-4-11 16:59
这个大赛不是面向计算机专业的吧~~~~~~     此题起码应该加个运行限定才算难题   (比如多少行代码内解决)
作者: bigice803    时间: 2008-4-11 19:36
标题: 回复 12楼 的帖子
是的,谢谢你的建议!![s:19]
作者: 夜色温柔    时间: 2008-4-11 21:25
编程大赛   嘿嘿  可惜不在学校了 要不也想试试阿
随便写个  各路高手莫要见笑啊
混乱紧凑版:
#include "stdafx.h"
#include <time.h>
#include <stdlib.h>   
int _tmain(int argc, _TCHAR* argv[])
{
        char *f ="he was fishing at that day";
        char *s ="he was sleeping at that day";        
        char *a[5] = {f,f,f,s,s};
        struct tm t1 = {0};
        struct tm t2 = {0};
        t1.tm_year = 90 , t1.tm_mon =0  , t1.tm_mday = 1;
        printf("Enter year/month/day:\n");
         scanf("%d%d%d",&t2.tm_year,&t2.tm_mon,&t2.tm_mday);
        t2.tm_year = t2.tm_year - 1900 , t2.tm_mon = t2.tm_mon - 1;
        printf("%s\n",a[((int)((difftime(mktime(&t2),mktime(&t1)))/(24*3600)))%5]);        
        system("pause");
        return 0;
}
作者: bigice803    时间: 2008-4-11 22:24
标题: 回复 14楼 的帖子
非常感谢,你是学哥??
爱好星际的……
作者: lichao_2007    时间: 2008-4-11 22:33
呵呵~这个程序得研究,呵呵~不过有创意~
作者: dixnuits    时间: 2008-4-25 20:28
#include "stdafx.h"

看见这个我现在就头大.

我已经不在win32下开发了.

毕业好多年了,也参加不了,估计也不要我..呵呵
作者: Cole    时间: 2008-5-8 20:54
样题在TC 下测试 未通过,报告完毕!
作者: bigice803    时间: 2008-5-8 21:45
标题: 回复 18楼 的帖子
回复 18楼 的帖子
这个我遍了下,不能理解的地方换成了我的思想,当初做答案的时候没有运行,真是疏忽了,希望的家谅解。
下面的程序我运行了下,输入1990,1,1        1990,1,5运行成功要是还有疏漏的地方希望的家提出来.
#include<stdio.h>
typedef struct {
                int year;
                int month;
                int day;
               }Date,*P_date;/*在定义结构体的同时声明了类似"类型"的两个"类型",前一个为定义的该结构体类型;
                    后一个为,该结构体类型的指针类型.在后面可以直接用这两个类型声明变量.*/

int days(Date* day);

int main()
{
   P_date term,today;
   int yearday,year,day;
   printf("Enter year/month/day:");
     scanf("%d%d%d",&today->year,&today->month,&today->day); /*输入日期*/
   term->month=12; /*设置变量的初始值:月*/
   term->day=31; /*设置变量的初始值:日*/
   for(yearday=0,year=1990;year<today->year;year++)
     {
       term->year=year;
       yearday+=days(term); /*计算从1990年至指定年的前一年共有多少天*/
     }
   yearday+=days(today); /*加上指定年中到指定日期的天数*/
   day=yearday%5; /*求余数*/
   if(day>0&&day<4)
      printf("he was fishing at that day.\n"); /*打印结果*/
   else
      printf("He was sleeping at that day.\n");
getch();
}

int days(P_date day)
{
   int i,lp;
  static int day_tab[2][13]=
    {
      {0,31,28,31,30,31,30,31,31,30,31,30,31,}, /*平均每月的天数*/
      {0,31,29,31,30,31,30,31,31,30,31,30,31,},
    };

  lp=day->year%4==0&&day->year%100!=0||day->year%400==0;/*判定year为闰年还是平年,lp=0为平年,非0为闰年*/
  for(i=1;i<day->month;i++) /*计算本年中自1月1日起的天数*/
     day->day+=day_tab[lp];
return day->day;
}
作者: jibintao    时间: 2008-5-15 15:21
俄都快受不廖俩!

这算什么题目,学过数学的人做不出来就是脑残!

一群连C语言的关键字的打不熟的人还谈大赛?可笑不自量!
作者: bigice803    时间: 2008-5-15 23:38
标题: 回复 20楼 的帖子
看来LS真是个强人,那么请您做做决赛题,这个题作为决赛的第一个题,不知道LS几分钟能做完.我等着你的答案.




欢迎光临 工大在线 (http://ruolanmy.hk1.ifreeurl.com/) Powered by Discuz! X2.5