Are We There Yet? (ZOJ Problem Set - 1745)
Laurie's little brother Joey has been playing Find the Cookie with her. However, after the 32,767th time, Laurie is tired of it. She wants to write a program to keep the boy occupied. Write a program to simulate a game of Find the Cookie. The game takes place in a long narrow hall, so Joey can only move forward and backward, not right or left. At the beginning of each game, a cookie is placed in the hall (not at the center of the hall) and Joey starts at the center of the hall. Joey attempts to find the cookie. He does this by moving to another point in the hall, whereupon the computer tells him whether he is "warmer" (he has moved closer to the cookie than his last position), "colder" (he has moved farther away from the cookie than his last position), "same" (he has not moved closer or farther away from the cookie), or he has reached the cookie. Joey continues until he exactly reaches the location of the cookie, which always happens within 20 moves.
Input
Each input line represents a new game. Each input line contains at least two and at most 21 integers separated by whitespace. The integers represent locations along the hall, expressed in units of feet. Joey begins each game at location 0 feet. The first integer on an input line is the location of the cookie. This integer is guaranteed to be different from 0. The remaining integers represent locations Joey moves to, in order. Joey will never move more than 5280 feet from his original location. Joey will always reach the cookie in each game, and this will be the last move on the input line. Your program should stop processing input lines when the cookie is located at 5280 feet (a mile from the center of the hall is way too far for Joey to go for only one cookie).
Output
For each location that Joey moves to, determine whether he is warmer, colder, the same, or has reached the cookie. Have a blank line between the output for different input lines. Follow the format in the Sample Output.
Sample Input
5 10 11 12 3 4 5
3 10 10 7 3
12 5 -3 1 4 6 7 8 9 12
5280 10
Sample Output
Moving from 0 to 10: same.
Moving from 10 to 11: colder.
Moving from 11 to 12: colder.
Moving from 12 to 3: warmer.
Moving from 3 to 4: warmer.
Moving from 4 to 5: found it!
Moving from 0 to 10: colder.
Moving from 10 to 10: same.
Moving from 10 to 7: warmer.
Moving from 7 to 3: found it!
Moving from 0 to 5: warmer.
Moving from 5 to -3: colder.
Moving from -3 to 1: warmer.
Moving from 1 to 4: warmer.
Moving from 4 to 6: warmer.
Moving from 6 to 7: warmer.
Moving from 7 to 8: warmer.
Moving from 8 to 9: warmer.
Moving from 9 to 12: found it!
Source: Southeast USA 2000
简单模拟题
对于初学者几个需要注意的地方:
一:绝对值使用abs,需要math函数或者判断大小后做差;
二:固定格式输出时,使用printf比较方便而且不容易出错。
三:根据题目要求,最后一组数据后不能加换行符,不然会PE,需要转化思路。在除第一组数据前加换行符。
四:题目中最后一些数据在代码中不必考虑,指的是5280 后面那个10.而如果后面还有数据,则可以用字符串读取一整行
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<math.h>
using namespace std;
int s;
void _in()
{
int fr=0,num;
while(cin>>num)
{
if(num==s) {
printf("Moving from %d to %d: found it! ",fr,num);
return ;
}
else if(abs(fr-s)>abs(num-s))printf("Moving from %d to %d: warmer. ",fr,num);
else if(abs(fr-s)<abs(num-s))printf("Moving from %d to %d: colder. ",fr,num);
else if(abs(fr-s)==abs(num-s))printf("Moving from %d to %d: same. ",fr,num);
fr=num;
}
}
int main()
{
int flag=0;
while(cin>>s&&s<5280){
if(flag++) printf(" ");
_in();
}
return 0;
}//注意格式
#include<cstdlib>
#include<iostream>
#include<math.h>
using namespace std;
int s;
void _in()
{
int fr=0,num;
while(cin>>num)
{
if(num==s) {
printf("Moving from %d to %d: found it! ",fr,num);
return ;
}
else if(abs(fr-s)>abs(num-s))printf("Moving from %d to %d: warmer. ",fr,num);
else if(abs(fr-s)<abs(num-s))printf("Moving from %d to %d: colder. ",fr,num);
else if(abs(fr-s)==abs(num-s))printf("Moving from %d to %d: same. ",fr,num);
fr=num;
}
}
int main()
{
int flag=0;
while(cin>>s&&s<5280){
if(flag++) printf(" ");
_in();
}
return 0;
}//注意格式