C语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网
生活随笔
收集整理的這篇文章主要介紹了
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语言题目:三天打鱼,两天晒网,判断输入日期是在打鱼还是晒网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xss漏洞工具 -- xsser
- 下一篇: 三极管封装总结