6-2 输入年份和天数,输出对应的年、月、日

要求定义和调用函数month_day ( year, yeardy, *****pmonth, *pday),通过参数pmonth和pday返回计算得出的月和日。例如,输入2000和61,分别返回3和1,即2000年的第61天是3月1日。

函数接口定义:

void month_day ( year, yeardy, *pmonth, *pday)

其中year是年,yearday是天数,****pmonth和pday是计算得出的月和日。

裁判测试程序样例:

# include <stdio.h>
void month_day ( int year, int yearday, int * pmonth, int * pday);

int main (void)
{
   int day, month, year, yearday; /*  定义代表日、月、年和天数的变量*/
   scanf ("%d%d", &year, &yearday );        
   month_day (year, yearday, &month, &day );/* 调用计算月、日函数  */ 
   printf ("%d %d %d\n", year, month, day );    
   return 0;    
}

/* 请在这里填写答案 */

输入样例:

2000  61

输出样例:

2000 3 1
void month_day ( int year, int yearday, int * pmonth, int * pday)
{
    int i,m=0;
    int a[12]={31,29,31,30,31,30,31,31,30,31,30,31},b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if((year%400==0)||(year%4==0&&year%100!=0))
    {for(i=0;yearday>0;i++)
       {
        if(yearday>a[i])
          {
            yearday-=a[i];
            m++;
          }
else break;
       }
    }
    else
    {
        for(i=0;yearday>0;i++)
       {
        if(yearday>b[i])
          {
            yearday-=b[i];
            m++;
          }
       else break;
       }
    }
    *pmonth=m+1;
    *pday=yearday;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这道题需要我们输入一个年份天数,然后输出对应。 具体来说,我们需要先判断输入年份是否为闰,因为闰和平天数是不同的。如果是闰,那么二份有29天,否则只有28天。 接着,我们需要根据输入天数来计算对应。具体的计算方法可以使用循环来实现。 最后,我们将计算出来的结果输出即可。 需要注意的是,这道题可能会涉及到一些边界情况,比如输入天数超过了一的总天数,或者输入年份不合法等等。因此,在编写代码时需要考虑到这些情况,做好相应的处理。 ### 回答2: 题目要求我们输入一个年份天数,然后输出天数对应。首先,我们需要知道每个份的天数,以及闰和平的判断方法。 每个份的天数是固定的,我们可以使用数组来存储它们。数组的下标表示份,对应的值表示该份的天数。例如,days[1] = 31 表示一份有31天。 判断闰的方法是:能被4整除但不能被100整除的年份是闰,能被400整除的年份也是闰。我们可以使用条件语句来实现这个判断。 接下来,我们需要计算期。假设我们输入的是2022的第100天,那么我们可以先判断2022是不是闰。如果是闰,2份有29天,那么第100天就是311。如果不是闰,2份有28天,那么第100天就是411。 我们可以使用循环语句来计算期,具体的做法是:先判断是否是闰,根据年份确定2份的天数;然后从1份开始累加天数,当累加的天数超过输入天数时,就得到了对应份和期。 代码实现如下: ``` #include <iostream> using namespace std; int main() { int year, days; cin >> year >> days; int days_of_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 每个份的天数 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 判断闰 days_of_month[2] = 29; } int month = 1, day = 0; while (days > days_of_month[month]) { // 计算份和期 days -= days_of_month[month]; month++; } day = days; cout << year << "" << month << "" << day << "" << endl; // 输出结果 return 0; } ``` ### 回答3: 这道题目看上去很简单,但是实际上需要我们理清思路,考虑如何实现。 首先,我们需要了解一个概念——闰。闰是指公历年份中能够被4整除,但不能被100整除的年份,或能够被400整除的年份。如果不考虑闰,一有365天,那么我们可以通过模运算算出输入天数对应。但是如果考虑闰,一个年份天数可能是366天,因此我们需要考虑到闰的情况。 接下来,我们需要思考如何计算输出。假设输入年份为y,天数为d,我们可以先计算出y是否为闰。如果是闰,那么这一天数应该是366天;如果不是闰,那么这一天数应该是365天。我们可以通过模运算计算出d对应年份是y+1、y+2还是y。如果是y,我们可以直接用d算出对应份和期;如果是y+1,我们需要先减去y天数,剩下的天数就是y+1天数,然后再用这个天数算出对应份和期。同样地,如果是y+2,需要先减去y和y+1天数,然后再用剩下的天数计算对应份和期。 计算份和期的方法将不再详细解释,可以通过模运算和switch语句实现。此外,还需要注意闰2天数是29天,其他份的天数是28天或30天或31天。 总的来说,这道题目需要我们运用一些数学知识和编程技巧,理清思路,才能成功地实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值