解题思路:
利用贪心的思想,每一步有两种选择,把这两种选择的结果都算出来,选最优的选择,每一步都选最优的选择
(我是参考Newguy_同学的思路,不过用c实现)
注意事项:
参考代码:
#include<stdio.h>
//贪心思想,每走一步,都有两种选择,flash或者跑,每次都选择可以逃得更远的那种
int main()
{
int M,S,t,i=0;
int flash=0,sum=0;//flash记录可以如果某一步选“闪”,能逃多远;sum先记录如果自己跑,能逃多远,然后和flash比较,最后取能逃得更远的那个数
scanf("%d%d%d",&M,&S,&t);
for(i=1;i<=t;i++)//将闪移和跑步分卡考虑,优先考虑闪移(因为魔法够的话,显然“闪”比较快)
{
if(M>=10)//魔法点数大于10,就“闪”
{
flash=flash+60;
M=M-10;
}
else//否则休息,加魔法点
M=M+4;
sum=sum+17;//如果这一步选自己跑,能跑多远
if(sum<flash)//最终sum存储这一步的最优选择
sum=flash;
if(sum>=S)
{
printf("Yes\n%d",i);
break;
}
}
if(i>t)
{
printf("No\n");
printf("%d\n",sum);
}
return 0;
}
0.0分
13 人评分
#include <stdio.h> int main() { long m=0,s=0,t=0; long es=0,et=0; scanf("%ld %ld %ld",&m,&s,&t); //第一阶段 while(m>=10){ es=es+60; et=et+1; m=m-10; } //二阶 while(s-es>120){ while(m<10){ et++; m=m+4; } m=m-10; es=es+60; } while(s-es<120 && s-es>60){ if(m>=2){ while(m<10){ et++; m=m+4; } m=m-10; es=es+60; } else if(m<2){ while (s-es>60){ et++; es=es+17; } } } //int ss=0; //ss=s-es; while
性傻在答 2018-11-21 22:42:39 |
#include <stdio.h> int main() { long m=0,s=0,t=0; long es=0,et=0; scanf("%ld %ld %ld",&m,&s,&t); //第一阶段 while(m>=10){ es=es+60; et=et+1; m=m-10; } //二阶 while(s-es>120){ while(m<10){ et++; m=m+4; } m=m-10; es=es+60; } while(s-es<120 && s-es>60){ if(m>=2){ while(m<10){ et++; m=m+4; } m=m-10; es=es+60; } else if(m<2){ while (s-es>60){ et++; es=es+17; } } } //int ss=0; //ss=s-es; while(s-es>0){ et++; es=es+17; } if(et<=t){ printf("Yes\n"); printf("%ld",et); }else { printf("No\n"); while(et>t){ es=es-17; et--; } printf("%ld",es); } // printf("%d %d",et,es); return 0; }不知道怎么错了
性傻在答 2018-11-21 22:48:38 |
知道错了
dotcpp0632515 2022-12-22 20:45:59 |
哪里
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:721 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:553 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:781 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:588 |
【计算直线的交点数】 (C语言代码)浏览:1501 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:561 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:1100 |
小九九 (C语言描述,不看要求真坑爹)浏览:1006 |
字符逆序 (C语言代码)浏览:675 |
矩形面积交 (C语言代码)浏览:1433 |