首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

300分 寻算法或者公式

2012-02-22 
300分 寻求一个算法或者公式满1年工人,可以休12天,第2年可以休13天,依次递推,最多可以休15天。第二年后可以

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
[解决办法]

没什么实际意义
[解决办法]
帮顶。
[解决办法]
这么个算法好多分哦,看来楼主旨在散分

帮顶,接分
[解决办法]
公司好像都是这么休假的~
[解决办法]
你的两年作废一次没有表达清楚
很难理解

照你的意思,只需要

C/C++ code
        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;
[解决办法]
没什么想法
[解决办法]
实际不是这样规定的吧,有多大意义吗?

[解决办法]
帮顶
[解决办法]
顶一下
[解决办法]

探讨
这么个算法好多分哦,看来楼主旨在散分

帮顶,接分

[解决办法]
大致就是按时间分区段讨论了,并不是很难
[解决办法]
switch case
[解决办法]
//是这么个意思吧?

int restDay(int workedyear){
if(workedyear<1) return 0;
int sum=0,iClear=0;
for(int i=0;i<workedyear;i++){
if(iClear>=2){
sum=sum-(12+i-1-1);
}
if(iClear>3){
sum=sum+15;
}
else{
sum=sum+12+i;
}
iClear++;
}
return sum;
}
[解决办法]
帮顶,接分
[解决办法]
根据lz说的,我有3个理解,其中一个求总共可获得的请假天数:
#include <stdio.h> 
main() 
{
int month;
int day;
printf("输入工龄(月数): "); 
scanf("%d",&month); 
if(month < 12) 
{
day = 0
}
else if(month >= 12 && month < 24) 

day = month + 1
}
else if(month >= 24 && month < 36) 

day = month + 2
}
else if(month >= 36) 

day = month + 3
}
printf("总共可获得的休假天数:%d\n",day); 
}
[解决办法]
第2种是当年可获得的请假天数:
#include <stdio.h> 
main() 
{
int month;
int day;
printf("输入工龄(月数): "); 
scanf("%d",&month); 
if(month < 12) 
{
day = 0
}
else if(month >= 12 && month < 24) 

day = month%12 + 1
}
else if(month >= 24 && month < 36) 

day = month%12 + 2
}
else if(month >= 36) 

day = month%12 + 3
}
printf("当年可获得的休假天数:%d\n",day); 
}
[解决办法]
12楼好像有点问题,看看我的!
main()
{
int year; //工龄
int month; //月数
int day ; //可休假的天数
printf("输入工龄(月数): "); 
scanf("%d",&month); 
year=month/12;
if(year%2==0) //偶数,两年清空一次
 month=month%12;
else
 month=month%12+12;[/color]
if((year>0)&&(month%12!=0))//可按月休假
{
day=month; //13个月未休假则有13天的假期
}
else //按年休假
{
switch(year) 

case 0:
day=0;break;
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; 
}

}
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 + 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
[解决办法]

C/C++ code
#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了。

C/C++ code
#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;}
[解决办法]
不懂题意.
[解决办法]
探讨
#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;


[解决办法]
帮顶,楼主给点分啊,呵呵
[解决办法]
swich ( )
case:

[解决办法]
这么个问题也值得这么多人在这里写代码?学了C语言的都应该差不多吧(任何一种基本语言也都可以)!
既然来了,接个分吧!
[解决办法]
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); 
}
[解决办法]

探讨
这么个算法好多分哦,看来楼主旨在散分

帮顶,接分

[解决办法]
看看啊啊啊
啊啊
[解决办法]
帮顶,jf~
[解决办法]
switch()
{
case:
...
}
[解决办法]
jf
[解决办法]
探讨
什么东西

[解决办法]
题目虽然很简单,但给出正确答案的人却很少!

建议lz这样做,首先根据员工入职时间,员工上次请假时间,以及当前时间,得出上次请假时员工工作的月数,以及当前员工工作的月数!

然后还要得到上次员工请假的天数,因为上次员工请假可能没有把假休完,这部分假如果没有超过两年,仍可累积!

然后分情况讨论!

--想了想还是要分很多种情况讨论的,远不止部分坛友给出的 switch case 那么简单!如果lz愿意把200分全给我,我可以考虑一下,哈哈~
[解决办法]
顶一下
[解决办法]
学习了
[解决办法]
探讨
顶一下

[解决办法]
顶楼主了。
[解决办法]
记号一个,看看你怎么作的。

热点排行