黑马程序员技术交流社区
标题:
C基础的第十题,跟网上的对比了下,感觉自己写的还可以....
[打印本页]
作者:
mazhichao
时间:
2015-6-25 13:14
标题:
C基础的第十题,跟网上的对比了下,感觉自己写的还可以....
/**
小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
*/
#include<stdio.h>
//计算公元2006年到输入年份有多少个闰年,返回闰年个数
int getLeapyear(int year)
{
int leap,leap1;
leap = year/4 - 3*year/400;
leap1= 2006/4 - 3*2006/400;
return (leap-leap1);
}
//获取2006年1月1日到输入月份的天数
int getDayNum(int year,int month,int day)
{
int months[]={31,28,31,30,31,30,31,31,30,31,30,31};
int leapMonths[]={31,29,31,30,31,30,31,31,30,31,30,31};
int days = 0;
int num; //存储过去整年内的天数
int years;
int leap = getLeapyear(year); //获取经过几个闰年
years = year - 2006; //经过几年
if(year%4 == 0 && year%100 != 0 || year%400 == 0)
{
num = 365 * years + leap -1;//过去整年的天数
for(int i = 0;i < month - 1;i++)
{
days += leapMonths[i];//累加过去正月的天数
}
days = num + days + day;//总天数
}
else
{
num = 365 * year + leap;//过去整年的天数
for(int i = 0;i < month - 1;i++)
{
days += months[i];//累加过去正月的天数
}
days = num + days + day;//总天数
}
return days;
}
void getFriendNum(int days)
{
int grilFriend = days / 3; //女性朋友个数
int boyFriend = days /2; //男性朋友个数
printf("female friends Number is %d\n");
printf("male friends Number is %d\n");
}
int main()
{
int year,month,day;
//输入年份
printf("enter year,the year >= 2006: ");
scanf("%d",&year);
while(year < 2006)
{
printf("输入错误,年份不应小于2006,请重新输入\n");
scanf("%d",&year);
}
//输入月份
printf("enter montth,the month > 0 and month <= 12: ");
scanf("%d",&month);
while(month <= 0 ||month > 12)
{
printf("输入错误,月份不应大于0小于13,请重新输入\n");
scanf("%d",&month);
}
//输入日期并判断
if(month == 2 && year%4 == 0 && year%100 != 0 || year%400 == 0)
{
printf("本月为闰年2月份,请输入天数,天数应 <= 29: ");
scanf("%d",&day);
while(day>29)
{
printf("输入错误,天数应<=29,请清新输入\n");
scanf("%d",&day);
}
}
else if(month == 2)
{
printf("本月为平年2月份,请输入天数,天数应 <= 28: ");
scanf("%d",&day);
while(day>28)
{
printf("输入错误,天数应<=28,请清新输入\n");
scanf("%d",&day);
}
}
else if(month == 4 || month == 6 || month == 9 || month == 11)
{
printf("%d月份应 <= 30,请输入天数: ",month);
scanf("%d",&day);
while(day>30)
{
printf("输入错误,天数应<=30,请清新输入\n");
scanf("%d",&day);
}
}else
{
printf("%d月份应 <= 31,请输入天数: ",month);
scanf("%d",&day);
while(day>31)
{
printf("输入错误,天数应<=31,请清新输入\n");
scanf("%d",&day);
}
}
getFriendNum(getDayNum(year,month,day));
}
作者:
fanxing
时间:
2015-6-25 19:00
本帖最后由 fanxing 于 2015-6-25 19:03 编辑
//10、 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
#include <stdio.h>
int main(){
printf("请输入年月日用空格隔开:");
int n = 0;
int y = 0;
int r = 0;
scanf("%d%d%d", &n, &y, &r);
int count = 0;
int month = 11;
int day = 0;
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
for(int i = 2006; i <= n; i++){
days[1] += (i % 100) && !(i & 3) || !(i % 400);
if(n == i) month = y;
for(int m = 0; m <= month - 1; m++){
day = days[m];
if(n == i && m == y - 1) day = r;
for (int d = 1; d <= day; d++) count += 1;
}
days[1] -= (i % 100) && !(i & 3) || !(i % 400);
}
printf("%d ", count);
if(count % 2 == 0){
printf("帅哥");
}
else if(count % 3 == 0){
printf("美女");
}
return 0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2