NUIST_OJ 1022日历问题

题目描述已知 2007 年 10 月 10 日,请求出 n 天后是几月几号输入描述多组输入,每组输入为 1 行,为一个正整数 n( 1≤n≤2000)
输出描述对于每组输入,输出格式为 yyyy-mm-dd , 输出的值为 n 天后的日期
样例输入
2
样例输出
2007-10-11
2007-10-12

挺喜欢做这种有实际用处的题目的///作为一个小菜鸡 //这能做做应用题来安慰安慰自己)=哭哭
这个问题挺简单一般用switch
要分类讨论一下各种情况
先上代码kkkkk

#include<iostream>
 using namespace std;
 int main(){
     int n;
     while(cin>>n){
     int year=2007;//先初始化2007-10-10
     int month=10;
     int day=10;    
         for(int i=1;i<=n;i++){
            day=day+1;//从日开始一点儿一点儿往上加
             switch(month){//先找出每个月有31天的月份方便后面对超出一个月最大天数而进行的月份进位
                 case 1:
                 case 3:
                 case 5:
                 case 7:
                 case 8:
                 case 10:
                 case 12:
                     if(day==32){
                         month=month+1;//超出最大天份月数加一
                         day=1;
                     }
                     if(month==13){//超出最大年份年份加一
                         year=year+1;
                         month=1; 
                     }break;
                 case 2://闰年2月有29天  ,要分开讨论
                     if((year%4==0&&year%100!=0)||year%400==0){
                         if(day==30){
                             month=month+1;
                             day=1;
                         }
                     }
                     else{
                         if(day==29){
                             month=month+1;
                             day=1;
                         } 
                     }break;
                 default:
                     if(day==31){
                         month=month+1;
                         day=1;
                     }
                     if(month==13){
                         year=year+1;
                         month=1;
                     }break;
             }
         }
         if(month<10&&day<10){
             cout<<year<<"-"<<0<<month<<"-"<<0<<day<<endl;
         }
         else if(month<10&&day>=10){
             cout<<year<<"-"<<0<<month<<"-"<<day<<endl;
         }
         else if(month>=10&&day<10){
             cout<<year<<"-"<<month<<"-"<<0<<day<<endl;
         }
         else{
             cout<<year<<"-"<<month<<"-"<<day<<endl;
         }
     }
     return 0;
 }

自认为这个方法比较长 效率比较低,但我认为这个对于初次做这道题可以有一个系统的分析。效率更好的方法只需要在中间几步给出变更即可。

拜拜

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是实现上述功能的 Python 代码: ```python # 写入 Nuist.txt 文件 with open('Nuist.txt', 'w', encoding='utf-8') as f: f.write('''《将进酒》是唐代大诗人李白沿用乐府古题创作的五言诗歌。 此诗思想内容非常深沉,艺术表现非常成熟,在同题作品中影响最大。 诗人豪饮高歌,借酒消愁,抒发了忧愤深广的人生感慨。 诗中交织着失望与自信、悲愤与抗争的情怀,体现诗人强烈的豪纵狂放的个性。 全诗情感饱满,无论喜怒哀乐,其奔涌迸发均如江河流泻,不可遏止,且起伏跌宕,变化剧烈; 在手法上多用夸张,且常以巨额数词修饰,既表现诗人豪迈洒脱的情怀,又使诗作本身显得笔墨酣畅,抒情有力; 在结构上大开大阖,张弛有度,充分体现了李白五言诗歌的豪放特色。''') # 读取 Nuist.txt 文件并将其内容写入 Nuist_AI.txt 文件 with open('Nuist.txt', 'r', encoding='utf-8') as f: content = f.read() with open('Nuist_AI.txt', 'w', encoding='utf-8') as f: f.write(content) # 将 Nuist_AI.txt 文件中的五言诗歌修改成七言歌行 with open('Nuist_AI.txt', 'r+', encoding='utf-8') as f: content = f.read() content = content.replace('五言诗歌', '七言歌行') f.seek(0) f.write(content) f.truncate() ``` 这段代码首先使用 `with open()` 语句以写入模式('w')打开名为 "Nuist.txt" 的文件并写入文本。接着,代码再次使用 `with open()` 语句以只读模式('r')打开 "Nuist.txt" 文件,并将其内容读取到变量 `content` 中。然后,代码使用 `with open()` 语句以写入模式('w')打开名为 "Nuist_AI.txt" 的文件,并将 `content` 变量中的内容写入该文件。 最后,代码再次使用 `with open()` 语句以读写模式('r+')打开 "Nuist_AI.txt" 文件,并将其内容读取到变量 `content` 中。接着,代码使用字符串的 `replace()` 方法将 `content` 变量中的 "五言诗歌" 替换为 "七言歌行"。然后,代码使用 `seek()` 方法将文件指针移动到文件开头,使用 `write()` 方法将修改后的 `content` 变量中的内容写入文件,并使用 `truncate()` 方法截断文件,使其长度与新内容的长度相同。这样,就完成了将 Nuist_AI.txt 文件中的五言诗歌修改为七言歌行的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值