一、指路哦
02【C语言&趣味算法】借书方案问题:小明有5本新书,要借给A、B、C三位小朋友,若每人每次只能借1本,则可以有多少种不同的借法?
01【C语言&趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
三、打鱼还是晒网呦?
3.1问题描述
3.2问题分析
3.3算法设计
3.4确定程序框架
程序流程图如下:
根据流程,构建程序框架如下:
3.5求出指定日期距1990年1月1日的天数
3.6完整code 及结果
本例的趣味之处,在于使用结构体来巧妙存储表达年、月、日三个变量。
同时,通过自定义的判断闰年О函数以及求距离1990年1月1日的天数的函数,也是本题比较巧妙的—点。
总之,本题还是十分值得“品味”滴,下面来看源代码吧!
// 趣味03:打鱼 还是 晒网? #include<stdio.h> /*定义日期结构体*/ typedef struct date { int year; int month; int day; }DATE; int countDay(DATE); /*函数声明*/ int runYear(int); /*函数声明*/ int main() { DATE today; /*指定日期*/ int totalDay; /*指定日期距离1990年1月1日的天数*/ int result;/*totalDay对5取余的结果*/ /*输入指定日期,包括年,月,日*/ printf("please input 指定日期 包括年,月,日 如:1999 1 31\n"); scanf("%d%d%d",&today.year,&today.month,&today.day); /*求出指定日期距离1990年1月1日的天数*/ totalDay=countDay(today); /*天数%5,判断输出打鱼还是晒网*/ result=totalDay%5; if(result>0&&result<4) printf("今天打鱼"); else printf("今天晒网"); } /*判断是否为闰年,是返回1,否返回0*/ int runYear(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) /*是闰年*/ return 1; else return 0; } /*计算指定日期距离1990年1月1日的天数*/ int countDay(DATE currentDay) { int perMonth[13]={0,31,28,31,30,31,30,31,31,30,31,30}; /*每月天数数组*/ int totalDay=0,year,i; /*求出指定日期之前的每一年的天数累加和*/ for(year=1990;year<currentDay.year;year++) { if(runYear(year)) /*判断是否为闰年*/ totalDay=totalDay+366; else totalDay=totalDay+365; } /*如果为闰年,则二月份为29天*/ if(runYear(currentDay.year)) perMonth[2]+=1; /*将本年内的天数累加到totalDay中*/ for(i=0;i<currentDay.month;i++) totalDay+=perMonth[i]; /*将本月内的天数累加到totalDay中*/ totalDay+=currentDay.day; /*返回totalDay*/ return totalDay; }
结果:测试了几个结果,拼到—起啦,看着比较方便咯~