您的位置:首页 > 其它

UVaOJ 537 - Artificial Intelligence?

2012-11-09 20:13 295 查看
AOAPC I: Beginning Algorithm Contests (Rujia Liu) :: Volume
1. Elementary Problem Solving :: String

Description

物理老师提问,根据 P = IU 这个公式计算并回答。

提问会告诉你公式中的任意两个元素的值,求出第三个元素的值。

因此,提问语句中含有两个 DataField,DataField的格式如下:

DataField ::= Concept '=' RealNumber [Prefix] Unit
Concept ::= 'P' | 'U' | 'I'
Prefix ::= 'm' | 'k' | 'M'
Unit ::= 'W' | 'V' | 'A'

其中,Prefix可为 m (milli) 、k (kilo) 或 M (Mega) 。

并且题目的输入保证如下三点:

“=”在提问语句里,只出现在DataField中。
DataField中不出现多余空格。
题目保证三个元素中有且只有给出两个元素的值。

Type

String

Analysis

找到提问语句中的“=”,以“=”为基准,

在“=”两边找到我们需要的数据即可。

Solution

// UVaOJ 537
// Artificial Intelligence
// by A Code Rabbit

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;

const char CONCEPT[] = {'I', 'U', 'P'};

string str;

double real[3];
bool bo[3];

void Read(int idx);

int main() {
int tot_case;
scanf("%d", &tot_case);
getchar();
for (int t = 1; t <= tot_case; t++) {
// Input.
getline(cin, str);
// Solve.
memset(bo, false, sizeof(bo));
Read(str.find_first_of('='));
Read(str.find_last_of('='));
// Output.
printf("Problem #%d\n", t);
if (!bo[0]) printf("I=%.2lfA\n", real[2] / real[1]);
else if (!bo[1]) printf("U=%.2lfV\n", real[2] / real[0]);
else if (!bo[2]) printf("P=%.2lfW\n", real[0] * real[1]);
printf("\n");
}

return 0;
}

void Read(int idx) {
double val; char ch;
string tmp = str.substr(idx + 1);
sscanf(tmp.c_str(), "%lf%c", &val, &ch);

if (ch == 'm') val /= 1000;
else if (ch == 'k') val *= 1000;
else if (ch == 'M') val *= 1000000;

char concept = str[idx - 1];
for (int i = 0; i < 3; i++) {
if (concept == CONCEPT[i]) {
real[i] = val;
bo[i] = true;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: