UVA之537 - Artificial Intelligence?

简介:

  Artificial Intelligence? 

Physics teachers in high school often think that problems given as text are more demanding than pure computations. After all, the pupils have to read and understand the problem first!

So they don't state a problem like ``U=10V, I=5A, P=?" but rather like ``You have an electrical circuit that contains a battery with a voltage of U=10V and a light-bulb. There's an electrical current of I=5A through the bulb. Which power is generated in the bulb?".

However, half of the pupils just don't pay attention to the text anyway. They just extract from the text what is given: U=10V, I=5A. Then they think: ``Which formulae do I know? Ah yes, P=U*I. Therefore P=10V*5A=500W. Finished."

OK, this doesn't always work, so these pupils are usually not the top scorers in physics tests. But at least this simple algorithm is usually good enough to pass the class. (Sad but true.)

Today we will check if a computer can pass a high school physics test. We will concentrate on the P-U-I type problems first. That means, problems in which two of power, voltage and current are given and the third is wanted.


Your job is to write a program that reads such a text problem and solves it according to the simple algorithm given above.

Input 

The first line of the input file will contain the number of test cases.

Each test case will consist of one line containing exactly two data fields and some additional arbitrary words. A data field will be of the form I=xA, U=xV or P=xW, where x is a real number.

Directly before the unit (A, V or W) one of the prefixes m (milli), k (kilo) and M (Mega) may also occur. To summarize it: Data fields adhere to the following grammar:

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

Additional assertions:

  • The equal sign (`=') will never occur in an other context than within a data field.
  • There is no whitespace (tabs,blanks) inside a data field.
  • Either P and U, P and I, or U and I will be given.

Output 

For each test case, print three lines:

  • a line saying ``Problem #k" where k is the number of the test case
  • a line giving the solution (voltage, power or current, dependent on what was given), written without a prefix and with two decimal places as shown in the sample output
  • a blank line

Sample Input 

3
If the voltage is U=200V and the current is I=4.5A, which power is generated?
A light-bulb yields P=100W and the voltage is U=220V. Compute the current, please.
bla bla bla lightning strike I=2A bla bla bla P=2.5MW bla bla voltage?

Sample Output 

Problem #1
P=900.00W

Problem #2
I=0.45A

Problem #3
U=1250000.00V



Miguel A. Revilla 
1999-01-11

【题意】: 根据P = U * I公式进行计算。 输入一行字符串,其中给出P,U,I三个变量的任意两个值求出第三个值。
【代码】:
[cpp]  view plain copy
  1. <span style="font-style: normal;">/********************************* 
  2. *   日期:2013-4-28 
  3. *   作者:SJF0115 
  4. *   题号: 题目537 - Artificial Intelligence? 
  5. *   来源:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=478 
  6. *   结果:AC 
  7. *   来源:UVA 
  8. *   总结: 
  9. **********************************/  
  10. #include<stdio.h>  
  11. #include<string.h>  
  12.   
  13. int main (){  
  14.     int i,j,Case,index=1;  
  15.     double P,I,U,c;  
  16.     char str[1001];  
  17.     //freopen("C:\\Users\\XIAOSI\\Desktop\\acm.txt","r",stdin);    
  18.     while(scanf("%d\n",&Case) != EOF){  
  19.         while(Case--){  
  20.             P = 0;  
  21.             I = 0;  
  22.             U = 0;  
  23.             c = 1;  
  24.             gets(str);  
  25.             for(i = 0;i < strlen(str);){  
  26.                 //P  
  27.                 if(str[i] == 'P' && str[i+1] == '='){  
  28.                     i += 2;  
  29.                     //提取小数点前数据  
  30.                     while(str[i] >= '0' && str[i] <= '9'){  
  31.                         P = P * 10 + str[i] - '0';  
  32.                         i++;  
  33.                     }  
  34.                     //提取小数点后数据  
  35.                     if(str[i] == '.'){  
  36.                         i++;  
  37.                         while(str[i] >= '0' && str[i] <= '9'){  
  38.                             c *= 0.1;   
  39.                             P += c * (str[i] - '0');  
  40.                             i++;  
  41.                         }  
  42.                     }  
  43.                     c = 1;  
  44.                     if(str[i] == 'k'){  
  45.                         P *= 1000;  
  46.                         i++;  
  47.                     }  
  48.                     else if(str[i] == 'm'){  
  49.                         P /= 1000;  
  50.                         i++;  
  51.                     }  
  52.                     else if(str[i] == 'M'){  
  53.                         P *= 1000000;   
  54.                         i++;  
  55.                     }  
  56.                 }  
  57.                 //U  
  58.                 else if(str[i] == 'U' && str[i+1] == '='){  
  59.                     i += 2;  
  60.                     //提取小数点前数据  
  61.                     while(str[i] >= '0' && str[i] <= '9'){  
  62.                         U = U * 10 + str[i] - '0';  
  63.                         i++;  
  64.                     }  
  65.                     //提取小数点后数据  
  66.                     if(str[i] == '.'){  
  67.                         i++;  
  68.                         while(str[i] >= '0' && str[i] <= '9'){  
  69.                             c *= 0.1;   
  70.                             U += c * (str[i] - '0');  
  71.                             i++;  
  72.                         }  
  73.                     }  
  74.                     c = 1;  
  75.                     if(str[i] == 'k'){  
  76.                         U *= 1000;  
  77.                         i++;  
  78.                     }  
  79.                     else if(str[i] == 'm'){  
  80.                         U /= 1000;  
  81.                         i++;  
  82.                     }  
  83.                     else if(str[i] == 'M'){  
  84.                         U *= 1000000;   
  85.                         i++;  
  86.                     }  
  87.                 }  
  88.                 //I  
  89.                 else if(str[i] == 'I' && str[i+1] == '='){  
  90.                     i += 2;  
  91.                     //提取小数点前数据  
  92.                     while(str[i] >= '0' && str[i] <= '9'){  
  93.                         I = I * 10 + str[i] - '0';  
  94.                         i++;  
  95.                     }  
  96.                     //提取小数点后数据  
  97.                     if(str[i] == '.'){  
  98.                         i++;  
  99.                         while(str[i] >= '0' && str[i] <= '9'){  
  100.                             c *= 0.1;   
  101.                             I += c * (str[i] - '0');  
  102.                             i++;  
  103.                         }  
  104.                     }  
  105.                     c = 1;  
  106.                     if(str[i] == 'k'){  
  107.                         I *= 1000;  
  108.                         i++;  
  109.                     }  
  110.                     else if(str[i] == 'm'){  
  111.                         I /= 1000;  
  112.                         i++;  
  113.                     }  
  114.                     else if(str[i] == 'M'){  
  115.                         I *= 1000000;   
  116.                         i++;  
  117.                     }  
  118.                 }  
  119.                 i++;  
  120.             }  
  121.             //输出  
  122.             printf("Problem #%d\n",index);  
  123.             if(P > 0 && I > 0){  
  124.                 printf("U=%.2lfV\n",P / I);  
  125.             }  
  126.             else if(P > 0 && U > 0){  
  127.                 printf("I=%.2lfA\n",P / U);  
  128.             }  
  129.             else if(U > 0 && I > 0){  
  130.                 printf("P=%.2lfW\n",U * I);  
  131.             }  
  132.             printf("\n");  
  133.             index++;  
  134.         }  
  135.     }  
  136.     return 0;  
  137. }  
  138.   
  139.       
  140. </span>  

目录
相关文章
|
2月前
|
消息中间件 自然语言处理 运维
微服务不是银弹!这4个设计原则让你少踩90%的坑
本文深入解析微服务架构与领域驱动设计(DDD)的核心理念与实践方法,帮助开发者正确拆分服务边界,避免常见误区,提升系统可维护性与扩展性,适用于复杂业务场景下的高效开发与团队协作。
284 1
|
JSON JavaScript 数据格式
vue 处理JSON文件——上传导入、下载导出、在线预览
vue 处理JSON文件——上传导入、下载导出、在线预览
413 7
|
传感器 数据采集 物联网
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计2
基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计
1494 0
|
jenkins 持续交付 API
上传gitlab代码后jenkins自动进行发布的配置
上传gitlab代码后jenkins自动进行发布的配置
293 1
|
12月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
561 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这款Alibaba SpringCloud微服务项目真香!Github标星35K+
近年来随着互联网的飞速发展,各行各业都在拥 互联网。互联网给人类生活带来了翻天覆地的变化,人们在享受互联网给生活带来便捷的同时,业务需求的发展也对互联网技术提出了更高的要求,传统的单体架构对越来越复杂的业务需求显得力不从 此外,随着大数据云计算和人工智能的飞速发展,软件的架构显得越来越重要。近几年来,“微服务”这名词在各大网站、论坛、演讲中出现的频率足以让人们感觉到它对软件架构带来的影响 。目前,各大公司都在纷纷采用微服务架构。
|
SQL 数据可视化 算法
掌握计算机逻辑:离散数学中的逻辑和布尔代数
掌握计算机逻辑:离散数学中的逻辑和布尔代数
|
JavaScript
基于js和html的骰子游戏
基于js和html的骰子游戏
722 0
|
存储 编译器 测试技术
【3w字吐血总结 | 新手必看】全网最详细Go笔记
【3w字吐血总结 | 新手必看】全网最详细Go笔记
348 0
|
Unix
全网首发:configure: error: cannot guess build type; you must specify one
全网首发:configure: error: cannot guess build type; you must specify one
971 0