nyoj-219-An problem about date

2024-06-10 15:38
文章标签 date problem nyoj 219

本文主要是介绍nyoj-219-An problem about date,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//超时代码
#include<stdio.h>
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int nian(int y)
{
 if(y%4==0&&y%100!=0||y%400==0)
  return 1;
 else return 0;
}
int main()
{
 int y,m,d;
 while(scanf("%d%d%d",&y,&m,&d)!=EOF)
 {
  int i,j,sum1,sum2,t1,n;
  sum1=274;sum2=91;//以1949 10 1为标准
  t1=0;
  if(nian(y))
  {
   for(i=1;i<m;i++)
    if(i==2)
     t1+=29;
    else
     t1+=a[i];  
  }
  else
  {
   for(i=1;i<m;i++)
    t1+=a[i];
  }
  t1+=d;
  if(y<=1949)
  {
   for(i=0;y+i<1949;i++)
    if(nian(y+i))
     sum1+=366;
    else
     sum1+=365;
    if(sum1>=t1)
    {
     n=sum1-t1;
     printf("%d\n",6-n%7);
    }
    else
    {
     n=t1-sum1; 
     printf("%d\n",n%7-1);
    }
    
  }
  else
  {
   for(i=1;i<y-1949;i++)
    if(nian(1949+i))
     sum2+=366;
    else sum2+=365;
    n=t1+sum2;
    printf("%d\n",n%7-1);
  }
 }
 return 0;

//不超时的代码
#include<stdio.h>
int a[96001]={0};//以1600年1月1日星期6为标准
int b[13]={31,31,28,31,30,31,30,31,31,30,31,30};
int c[13]={31,31,29,31,30,31,30,31,31,30,31,30};
int nian(int y)
{
 if(y%4==0&&y%100!=0||y%400==0)
  return 1;
 else return 0;
}
void tian()
{
 int i,j,k;
 k=1;
 for(i=0;i<8000;i++)
 {
  if(nian(1600+i))
   for(j=1;j<13;j++)
    a[k++]=a[k-1]+c[j%12];
   else
    for(j=1;j<13;j++)
    a[k++]=a[k-1]+b[j%12];
 }
}
int main()
{
 int y,m,d,n,sum;
 tian();
 while(scanf("%d%d%d",&y,&m,&d)!=EOF)
 {
  n=(y-1600)*12+m-1;
  sum=a[n]+d;
  printf("%d\n",(sum+5)%7);
 }
 return 0;
}

 

//高手的代码
#include<stdio.h>
int main()
{
    int d,m,y;
    while(scanf("%d%d%d",&y,&m,&d)!=EOF)
    {
        if(m>=1&&m<=2)
        {
            m+=12;
            y-=1;
        }
        printf("%d\n",(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7);
    }
    return 0;
}

这篇关于nyoj-219-An problem about date的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048567

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

nyoj 288 士兵杀敌(五)

一道插线问线离线版的题  复杂度O(n); 代码如下: #include<stdio.h>#include<string.h>const int M = 1000003;const int mod=10003;int num[M];int main(){int n,c,q;scanf("%d%d%d",&n,&c,&q);while(c--){int a,b,x;scan

nyoj 1037 Postscript of Tian Ji racing

一道卡贪心的题。 也算一道改编题。 此题的解法推荐为二分图的最大匹配。 首先将输入数据转换一下,然后将满足题意的一组牌建立条边,最终边的覆盖数即为 LN 最后可得的分数。 然后求出最大匹配即可。 代码如下: #include<stdio.h>#include<string.h>char card[30][5];char s[5];int map[30][30];

nyoj 1002 Trucking

同样一道改编题。 只要把题意理解了好。 简单的二分加最短路。 只要二分高度, 然后求最短路,输出满足题意的即可。 代码如下: (最短路用spfa 时间效率高) #include <iostream>#include <cstdio>#include <cstring>#include <ctime>#include <queue>using namespace st

nyoj 1072 我想回家

一道相当题目描述相当扯的题。 这道题目的描述最后说的是求出到达最后一个点的最短距离,所以输入数据最后输入的城堡的坐标是没用的。 就是先求出两点之间的距离,若不大于村落间距离,并且不大于最后的距离限制 l ,则在两点间建边。 最后任意方法求出最短路即可。 #include <iostream>#include<stdio.h>#include<vector>#include<

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

nyoj 685 查找字符串

当初一开始没做出来。 后来,学习过一段时间之后,在返回来做这道题,忽然发现,map类容器可以做。 PS:需要注意的是:此题如果用c++的输入输出的话,会超时。 O(time):gets()<  scanf() < cin。   附上代码: #include<stdio.h>#include<map>#include<string>#include<string.h>usin

nyoj 695 Judging Filling Problems

一道强大的模拟题。。。 只要学会<string>类的运用即可。。。 注意: 1、细节的处理。 2、问题的分情况讨论。。 附上代码: 有好对缀余的地方,希望大神前来更新。 #include<stdio.h>#include<string.h>#include<string>#include<iostream>using namespace std;int num[1000

11991 - Easy Problem from Rujia Liu?

题意: 输入一串整型数列,再输入两个数k,v,输出第k个v的序号。不存在则输出0,如第一个样例 8 41 3 2 2 4 3 2 11 3 //第1个3,序号为2,输出22 4 //第2个4,不存在,输出03 2 //第3个2,序号为7,输出74 2 思路: struct num {