537 - Artificial Intelligence?

来源:互联网 发布:音乐伴唱软件 编辑:程序博客网 时间:2024/05/22 10:43

一.思路

二.代码

三.总结


一.思路

本题关键是字符串读入提取的问题,

一开始我觉得用getchar一个一个读然后判断的话,如果读到等号等号前面的字符没有办法得到了

用gets一次性读入一行字符的话还是要一个一个判断

于是想着用scanf,每次读入一个单词判断一下这个单词里有没有等号


但是实际上用scanf读反而会是程度读起来更复杂。因为用scanf读入后还是要一个字符一个字符的判断

实际上还是要对字符进行逐个的判断

而之前遇到的问题可以有两种解决办法,

用getchar循环读入

一是判断等号,但是每次记录前一个读取的字符,然后判断前一个字符是否是PUI这三个字符中的某一个

一是判断是否是P,U,I这三个关键字符,然后判断其后的字符是否是等号,如果是进行数字的提取,如果不是,进行下一次循环


二.代码

#include<stdio.h>int main() {double P, I, U;char c,bc,t,pre;char line[1000];int n;scanf_s("%d", &n);t = getchar();int i;for (i = 1; i <= n;i++) {P = -1;I = -1;U = -1;int times = 2;while (times--) {while ((c = getchar()) != EOF) {if (c == '=') {if (bc == 'I') {scanf_s("%lf", &I);pre = getchar();if (pre == 'm') I = I*0.001;else if (pre == 'k')I = I * 1000;else if (pre == 'M')I = I * 1000000;break;}if (bc == 'U') {scanf_s("%lf", &U);pre = getchar();if (pre == 'm') U = U*0.001;else if (pre == 'k')U = U * 1000;else if (pre == 'M')U = U * 1000000;break;}if (bc == 'P') {scanf_s("%lf", &P);pre = getchar();if (pre == 'm') P = P*0.001;else if (pre == 'k')P = P * 1000;else if (pre == 'M')P = P * 1000000;break;}}// if c== '='bc = c;}//while c=getchar}//for igets_s(line);printf("%s%d\n", "Problem #", i);if (P == -1) { printf("P=%.2fW\n", U*I); }else if (U==-1) { printf("U=%.2fV\n", P/I); }else if (I==-1) { printf("I=%.2fA\n",P/U); }}//while nreturn 0;}

三.总结

如何选择最优的读入方式

读入时 注意转行符的处理 



0 0