京东笔试题:小东要考试,父亲安排了每天的最短复习时间和最长复习时间,但是小东只有自己的总复习时间,小明要安排这些时间。使得自己每天的复习时间在规定是时间范围内,并且前几天学习时间尽量长
#include <stdio.h>
#include <string.h>
int timeOk(int day,int minTime[],int maxTime[],int sumtime,int myTime[day])
{
int minall=0;
int maxall=0; //满足要求的最短时间和最长时间
int i;
for(i=0;i<day;i++){
minall+=minTime[i];
maxall+=maxTime[i];
}
if(minall>sumtime || maxall<sumtime)
return 0;
for(i=0;i<day;i++){
myTime[i]=minTime[i];
sumtime -= minTime[i];
//printf("%d,%d",i,sumtime);
}
i=0;
while(sumtime){
if(sumtime<=(maxTime[i]-minTime[i]) ){
myTime[i]+=sumtime;
sumtime=0;
}
else{
sumtime-=(maxTime[i]-minTime[i]);
myTime[i]+=(maxTime[i]-minTime[i]);
}
i++;
}
return 1;
}
int main()
{
int day,sumtime;
scanf("%d%d",&day,&sumtime);
int minTime[day],maxTime[day],myTime[day];;
int i;
for(i=0;i<day;i++){
scanf("%d %d",&minTime[i],&maxTime[i]);
}
int ok;
ok=timeOk(day,minTime,maxTime,sumtime,myTime);
if(ok==0){
printf("No\n");
}
else if(ok==1){
printf("Yes\n");
for(i=0;i<day;i++)
printf("%d ",myTime[i]);
}
return 0;
}
没写循环,自己添加。(只能输入一次数据)