300分 寻求一个算法或者公式
满1年工人,可以休12天,第2年可以休13天,依次递推,最多可以休15天。
第二年后可以按月休,比如13个月可以休13天,14个月可以休14天。
有个强制工人休假条件:2年作废一次
举例:
06 7.1 入职 --到07.7.1 有12天的假期,08.7.1前必须修完,否则12天就变为0
谢谢!
[解决办法]
up sf
[解决办法]
没理解什么意思
[解决办法]
up jf
[解决办法]
这个只要对每个人记录他每个假期的应用时间和失效时间即可,没有必要用很复杂的公式做
例如,一年无非就两种假期:上一年延续下来的假期(开始日期07.1,结束日期08.7.1)只要记录了这两类假期的数量和他们的起止日期,不就可以了?一个人两个结构变量就可以记录
[解决办法]
什么东西
[解决办法]
请问你想得到什么结果?是到某年某月这个人能休息多少天?
[解决办法]
没太明白..........LZ究竟要达到什么样的‘目的’?
特别是‘作废’的处理,似乎不是很清楚.......
[解决办法]
个人觉得可以找个学数学的给你推导个公式!
[解决办法]
看不懂jf
[解决办法]
意思估计大家都看明白了.
但是不知道你想实现什么.你要什么算法.
[解决办法]
#include <stdio.h>
main()
{
int i;
int month; /*月数*/
int year; /*年数*/
int day=0; /*休假天数*/
printf("输入工龄(月数): ");
scanf("%d",&month);
year=month/12;
if(year>=1&&month%24!=0)
{
switch(year)
{
case 1:
day=12;break;
case 2:
day=12+13;break;
case 3:
day=12+14;break;
case 4:
day=12+15;break;
default:day=12+15;
}
month-=12*year;
for(i=0;i<month;i++)
{
day++;
}
}
printf("休假天数:%d\n",day);
}
我编译过了,大家看看这样可以吗
[解决办法]
帮顶...................
[解决办法]
up
[解决办法]
没什么实际意义
[解决办法]
帮顶。
[解决办法]
这么个算法好多分哦,看来楼主旨在散分
帮顶,接分
[解决办法]
公司好像都是这么休假的~
[解决办法]
你的两年作废一次没有表达清楚
很难理解
照你的意思,只需要
switch(year) { case 0: day = 0;break; case 1: day=12;break; case 2: day=13;break; case 3: day=14;break; case 4: day=15;break; default:day=15; } day += month%12;
[解决办法]
没什么想法
[解决办法]
实际不是这样规定的吧,有多大意义吗?
[解决办法]
帮顶
[解决办法]
顶一下
[解决办法]
void main()
{
int month;
int day;
printf("输入工龄(月数): ");
scanf("%d",&month);
if(month < 12)
{
day = 0
}
else if(month >= 12 && month < 24)
{
day = month
}
else if(month >= 24 && month < 36)
{
day = month + 1
}
else if(month >= 36 && month < 48)
{
day = month + 2
}
else if(month >= 48)
{
day = month + 3
}
printf("总共可获得的休假天数:%d\n",day);
}
第二种当工作当年可获得的:
#include <stdio.h>
void main()
{
int month;
int day;
printf("输入工龄(月数): ");
scanf("%d",&month);
if(month < 12)
{
day = 0
}
else if(month >= 12 && month < 24)
{
day = month
}
else if(month >= 24 && month < 36)
{
day = month%12 + 1
}
else if(month >= 36 && month < 48)
{
day = month%12 + 2
}
else if(month >= 48)
{
day = month%12 + 3
}
printf("总共可获得的休假天数:%d\n",day);
}
第3种需要输入判断,就是该员工已经修假的天数,稍微要多加些代码。
[解决办法]
sorry,忘了加分号,是在网吧做的,也没调试,运行的时候加上就是了,网吧没有编译器
[解决办法]
up
[解决办法]
#include <time.h>#define DEADLINE_YEAR 2008#define DEADLINE_MON 8#define DEADLINE_DAY 1int GetRestDays(int year, int month, int day){ int days, work_years; time_t now; struct tm* tm_now; now = time(0); tm_now = localtime(&now); tm_now->tm_mon += 1; if(tm_now->tm_year > DEADLINE_YEAR) return 0; if(tm_now->tm_year == DEADLINE_YEAR) { if(tm_now->tm_mon > DEADLINE_MON) return 0; if(tm_now->tm_mon == DEADLINE_MON) if(tm_now->tm_mday >= DEADLINE_DAY) return 0; } work_years = tm_now->tm_year + 1900 - year; if(tm_now->tm_mon == month) if(tm_now->tm_mday < day) work_years--; else if(tm_now->tm_mon < month) work_years--; if(work_years <= 0) return 0; if(work_years >= 4) days = 15; else { switch(work_years) { case 1: days = 12; break; case 2: days = 13; break; case 3: days = 14; break; default: days = 0; } } if(tm_now->tm_mon > month) { if(tm_now->tm_mday >= day) days += tm_now->tm_mon - month; else days += tm_now->tm_mon - 1 - month; } return days;}int main(void){ printf("%d", GetRestDays(2002, 1, 4)); return 0;}
[解决办法]
这个没什么算法可讲,注意把存在的各种情况弄清楚
[解决办法]
题目的意思应该是:例如某个工人2000年3月1日参加工作,要求得2008年5月1日可以休多少天假?每过整两年一个循环,假期作废一次。
该工人工龄应该是98个月,运行程序求得休假29天
#include <stdio.h>
main()
{
int i;
int month; /*月数*/
int year; /*年数*/
int day=0; /*休假天数*/
printf("输入工龄(月数): ");
scanf("%d",&month);
year=month/12;
if(year>=1&&month%24!=0)
{
switch(year)
{
case 1:
day=12;break;
case 2:
day=12+13;break;
case 3:
day=12+14;break;
case 4:
day=12+15;break;
default:day=12+15;
}
month-=12*year;
for(i=0;i<month;i++)
{
day++;
}
}
printf("休假天数:%d\n",day);
}
[解决办法]
忘了加基数12了。
#include <time.h>#define DEADLINE_YEAR 2008#define DEADLINE_MON 8#define DEADLINE_DAY 1int GetRestDays(int year, int month, int day){ int days, work_years; time_t now; struct tm* tm_now; now = time(0); tm_now = localtime(&now); tm_now->tm_mon += 1; if(tm_now->tm_year > DEADLINE_YEAR) return 0; if(tm_now->tm_year == DEADLINE_YEAR) { if(tm_now->tm_mon > DEADLINE_MON) return 0; if(tm_now->tm_mon == DEADLINE_MON) if(tm_now->tm_mday >= DEADLINE_DAY) return 0; } work_years = tm_now->tm_year + 1900 - year; if(tm_now->tm_mon == month) if(tm_now->tm_mday < day) work_years--; else if(tm_now->tm_mon < month) work_years--; if(work_years <= 0) return 0; if(work_years >= 4) days = 27; else { switch(work_years) { case 1: days = 24; //12 + 12 break; case 2: days = 25; //12 + 13 break; case 3: days = 26; //12 + 14; break; default: days = 0; } } if(tm_now->tm_mon > month) { if(tm_now->tm_mday >= day) days += tm_now->tm_mon - month; else days += tm_now->tm_mon - 1 - month; } return days;}int main(void){ printf("%d", GetRestDays(2000, 3, 1)); return 0;}
[解决办法]
不懂题意.
[解决办法]
{
case 1:
day=12;break;
case 2:
day=12+13;break;
case 3:
day=12+14;break;
case 4:
day=12+15;break;
default:day=12+15;
}
month-=12*year;
for(i=0;i <month;i++)
{
day++;
}
}
printf("休假天数:%d\n",day);
}
[解决办法]