没有合适的资源?快使用搜索试试~ 我知道了~
C语言-打鱼晒网问题,带代码
需积分: 0 0 下载量 145 浏览量
2024-01-05
10:01:29
上传
评论
收藏 57KB PDF 举报
温馨提示
试读
2页
三天打鱼两天晒网c 打鱼晒网问题是一个经典的编程问题,其基本思路是: 有一片海域,里面有一些鱼,每天可以打捞一定数量的鱼。但是每次打捞后需要晒网一段时间,这段时间内不能再打捞鱼。假设每天只能打捞一次,且每天最多能打捞当天海域中的一半鱼。问最少需要多少天才能将所有的鱼打捞完? 解题思路: 设总共有n条鱼,每天最多能打捞m条鱼,则最少需要的天数为f(n, m)。 当m >= n时,只需要一天就可以将所有的鱼打捞完,即f(n, m) = 1; 当m < n时,第i天打捞了ai条鱼,则剩下的鱼数为n - ai。由于每天最多能打捞当天海域中的一半鱼,因此有: ai <= m * (n - ai + 1) / 2 化简可得: a[i] >= n - i + 1 因此,在第i天之前必须至少打捞出i条鱼,才能保证第i天能够打捞出ai条鱼。所以有: f(n, m) = i + 1 其中i为满足a[i] >= n - i + 1的最大值。 根据上述分析,可以得到以下C语言代码实现: ```c #include <stdio.h> int minDays(int n, int m
资源推荐
资源详情
资源评论
C语⾔——打鱼晒⽹问题
⼀、实例说明
如果⼀个渔夫从 2011 年 1 ⽉ 1 ⽇开始每三天打⼀次渔,两天晒⼀次⽹,编程实现当输⼊ 2011 年1⽉1⽇以后的任意⼀天, 输出该渔夫
是在打渔还是在晒⽹。
⼆、实现代码
#include<stdio.h>
int main()
{
int year,month,day;
int y=2010;
int sum=0;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//建⽴⼀个有平年各⽉份天数的数组
printf("请按照年⽉⽇的顺序输⼊⽇期,中间⽤空格隔开\n");
scanf("%d""%d""%d",&year,&month,&day);//输⼊⽇期
while((year<2010)||(month<1||month>12)||(month==2&&(year%4!=0||year%400!=0)&&day>=29)||(day>a[month]))
{
printf("输⼊⽇期错误,请重新输⼊\n");
printf("请按照年⽉⽇的顺序重新输⼊⽇期,中间⽤空格隔开");
scanf("%d""%d""%d",&year,&month,&day);
}
//判断输⼊⽇期是否正确
for(y;y<year;y++)//⽤此循环加上相差年份所隔的天数。
{
if((y%400==0)||(y%4==0&&y%100!=0))//判断此年份是否是闰年
{
sum+=366;
}//是闰年,则总天数加上366.
else
{
sum+=365;
}//是平年,总天数加上365
}
for(int m=1;m<month;m++)//⽤此循环加上所隔⽉份的总天数
{
sum+=a[m];
if(m==2&&((year%400==0)||(year%4==0&&year%100!=0)))
{
sum+=1;
}//判断⽉份是否为闰年2⽉,若是2⽉,则总天数加⼀。
}
sum+=day;//总天数加上⽇
if((sum%5==1)||(sum%5==2)||(sum%5==3))//⽤相隔总天数除以周期5,若余数为1,2,3,则此⼈打鱼。
{
printf("这个⼈今天打鱼");
}
else//否则,这个⼈晒⽹
{
printf("这个⼈今天晒⽹");
}
return 0;
}
三、实现结果
资源评论
RDSunday
- 粉丝: 232
- 资源: 171
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功