| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1533 人关注过本帖
标题:智能计算机
只看楼主 加入收藏
蓝奕天
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2019-6-8
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:1 
智能计算机
小明的老师在出考试试题时,总是喜欢把问题隐藏在题目的文字中,老师认为这样比单纯计算要
难得多,毕竟学生必须先看得懂题目才行。
 比如,他们不喜欢把题目出成像“速度=10 米/秒,时间=5 秒,请问距离=?”这种类型,而比
较喜欢出成“你有一玩具车,它的速度是 10 米/秒,如果让它在直线轨道上行驶 5 秒钟,它可以行驶
多米?”(由于本题输入采用英文,其对应用的英文如下:“If a toy car move at a speed of V=10m/s along
a straight line in T=5s, how far will it go ?”)
 然而超过半数的学生并不会把注意力放在那些文字上,他们只会设法从文字中找出已知条件:速
度=10 米/秒,时间=5 秒。然后思索“我该用哪条公式?Ah, yes, S=V*T(这里用 S 表示距离,其单位
为米 m、V 表示速度,单位为 m/s,T 表示时间,单位为秒 s),所以 S=10m/s*5m=50m,完成!”,显然
S=V*T,也可以变换为 V=S/T 或 T=S/V。
 这个方法并不是每次都有用,所以通常这些学生在考试中得不到顶尖的成绩,但至少这种简单的
方法足以获得及格以上的成绩。
 小明想试试计算机能不能通过这种考试呢?他首先尝试用计算机来解决距离-速度-时间(S-V-T)的
问题,也就是说题目给出任意两个已知条件,你要求出第三个。
 你的任务就是帮小明写一段程序通过读入一段题目的英文,并根据上面所描述的简易公式来求出
答案。
【输入】
输入文件 arti.in 包括一行,由一列包括两个明确的已知条件和一些额外的文字组成。已知条件会
以下列格式出现:S=xm 或 V=xm/s 或者 T=xs(x 属于实数),在单位(m,m/s 或 s)前可能会带有
一个数量级单位:k(kilo,表示 10 的 3 次方,如 5.3km 即为 5.3×1000=5300m)或 M(Mega,表示 10 的 6
次方, 如 5.3Ms 即为 5.3×1000000=5300000s ,其他以此类推)。
输入数据说明:
 等号不会出现在已知条件(S=xm 或 V=xm/s 或者 T=xs)外的地方。
 已知条件(S=xm 或 V=xm/s 或者 T=xs)中不会出现空格符。
 已知条件可能给出距离+速度或距离+时间或速度+时间三种形式中的任意一种。
【输出】
输出文件 arti.out 包括一行,即输出所求距离、速度或时间并将数量级转换为基本单位及两位有
效小数位数。
重要提示:
 请注意:输出时“=”左边的字母为大写字母,数值后面的字母为小写字
母,要严格按此要求,否则判为错误!
【输入输出样例 1】
arti.in arti.out
If the speed is V=200m/s and the time is T=4.5s, what will be the
distance ?
S=900.00m
【输入输出样例 2】
arti.in arti.out
A veicle travels a distance of S=100m at a speed of V=220m/s,
Compute the time, please.
T=0.45s
【输入输出样例 3】
arti.in arti.out
bla bla bla travels S=2.5Mm bla bla bla in T=2ks ,What is the
speed?
V=1250.00m/s
【数据说明】
60%的数据中距离、时间或速度为整数并且不包含数量级单位 k 或 M。
搜索更多相关主题的帖子: 速度 时间 距离 输入 条件 
2019-06-08 15:45
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:14 
程序代码:
#include <string>
#include <cstring>

std::string foo( const char* problem )
{
    double V=-1, T=-1, S=-1;

    const char* p1 = strchr( problem, '=' );
    {
        char a; double b; char c;
        sscanf( p1-1, "%c=%lf%c", &a, &b, &c );
        (a=='V' ? V : a=='T' ? T : S) = b * (c=='k' ? 1000 : c=='M' ? 1000000 : 1 );
    }

    const char* p2 = strchr( p1+1, '=' );
    {
        char a; double b; char c;
        sscanf( p2-1, "%c=%lf%c", &a, &b, &c );
        (a=='V' ? V : a=='T' ? T : S) = b * (c=='k' ? 1000 : c=='M' ? 1000000 : 1 );
    }

    char result[100];
    if( V == -1 )
        sprintf( result, "V=%.2fm/s", S/T );
    else if( T == -1 )
        sprintf( result, "T=%.2fs", S/V );
    else
        sprintf( result, "S=%.2fm", T*V );
    return result;
}

#include <iostream>
#include <cassert>
using namespace std;

int main( void )
{
    assert( foo("If the speed is V=200m/s and the time is T=4.5s, what will be the distance ?") == "S=900.00m" );
    assert( foo("A veicle travels a distance of S=100m at a speed of V=220m/s, Compute the time, please.") == "T=0.45s" );
    assert( foo("bla bla bla travels S=2.5Mm bla bla bla in T=2ks ,What is the speed?") == "V=1250.00m/s" );
}
2019-06-10 10:18
快速回复:智能计算机
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019001 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved