日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网

發布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言打魚曬網問題

問題描述

中國有句俗語:“三天打魚兩天曬網”,某人從1990年1月1日起開始“三天打魚兩天曬網”。問這個人在以后的某一天是在“打魚”還是在“曬網”?

分析問題

輸入部分:

很明顯,該題目需要我們輸入需要判斷打魚還是曬網的年,月,日。

那么,我們至少需要三個整型變量:year, month, day

輸出部分:

題目只要求判斷這個人是在打魚還是曬網。

由此,我們可知該題目可以通過得出總的時間跨度,然后判斷我們輸入的日期在打魚期還是曬網期。

功能實現:

首先我們需要計算總的時間跨度,然后利用求余判斷輸入的日期所在的階段。

所以,我們還需要一個存放總體時間跨度的整型變量:time。

而年份有閏年平年,月份有30, 28, 29, 31天,所以需要分情況討論:閏年/平年,月份。

綜上,問題解決框架已經清晰,開始編寫代碼:

#include<stdio.h> /*兔子騎士叫旺仔原創*/ main() {/*year:年份 month:月份 day:號 time:時間跨度 */int year, month, day, time, i;/*每月的天數*/int each_month[12] = {31, 29, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31};scanf("%d-%d-%d", &year, &month, &day);time = 0;/*整年計算天數*/for(i = 1990; i < year; i++){if((i % 400 == 0) || (i % 4 == 0) && (i % 100 != 0)){time += 366;}else{time += 365;}}/*判斷閏年,閏年2月有29天,每月的天數不做更改*/if((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0)){/*月份大于2月,依次加上每個月的天數*/ if(month > 2){for(i = 0; i < (month - 1) ; i++){time += each_month[i];}/*加上幾號*/ time += day;}/*月份小于2月,就只有1月,直接加上幾號即可*/else if(month < 2){time += day;}/*正好2月,加上1月份的31天和2月份的號數*/else{time = time + 31 + day;}}/*平年情況*/else{/*更改平年2月份天數為28天*/each_month[1] = 28;/*同閏年部分*/if(month > 2){for(i = 0; i < (month - 1) ; i++){time += each_month[i];}time += day;}else if(month < 2){time += day;}else{time = time + 31 + day;} }/*判斷處于打魚日還是曬網日*/if(0 < (time % 5) && (time % 5) < 4)printf("他在打魚");elseprintf("他在曬網"); }

需注意在我的代碼中所編寫的輸入格式

運行結果截圖



結束(改進建議)

該代碼還是有些麻煩,不難發現在閏年部分和平年部分的天數計算是重復的,可以把該部分代碼用自定義函數來實現該函數可以用來計算輸入的日期在該年已經經過的天數,然后直接加上整年數同樣可得出經過的時間跨度。

當然,工具是死的,人是靈活的,肯定還有不同的解法,我的肯定也不是最優解,希望各位多交流,共同進步。謝謝。

總結

以上是生活随笔為你收集整理的C语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。