poj 2256 P U I 字符串
来源:互联网 发布:java 非web工程 log4j 编辑:程序博客网 时间:2024/05/14 20:07
题意:看输入输出应该很明了,开始理解错了,以为输入的三句话是固定的呢,原来是任意的文本信息,然后没个字符串中,会出现P,U,I数值中的其中两个,然后根据P=UI,输出另外一个变量的数值。
这道题是在heu的练习上做的,没A,后来发现是北大的原题,弄了半天终于A了,真是考验耐心的好题啊!!懒得简化代码了~
#include<iostream>#include<ctype.h>using namespace std;int main(){ char S[30000]; char S1[10000],S2[10000]; int N,t,len,s1,e1,s2,e2,s3,e3,i,g,h; int flag1,flag2,flag3; float a,b; scanf("%d",&N); getchar(); for(t=1;t<=N;t++) { flag1=flag2=flag3=0; a=b=0; gets(S); len=strlen(S); for(i=0;i<len;i++) { if(S[i]=='U'&&S[i+1]=='=') {s1=i;flag1=1;} else if(S[i]=='V'&&((S[i-1]>='0'&&S[i-1]<='9')||(S[i-1]=='m'||S[i-1]=='k'||S[i-1]=='M')))//这里优先级总弄不好,还出错,多加几个括号吧 {e1=i;} else if(S[i]=='I'&&S[i+1]=='=') {s2=i;flag2=1;} else if(S[i]=='A'&&((S[i-1]>='0'&&S[i-1]<='9')||(S[i-1]=='m'||S[i-1]=='k'||S[i-1]=='M'))) e2=i; else if(S[i]=='P'&&S[i+1]=='=') {s3=i;flag3=1;} else if(S[i]=='W'&&((S[i-1]>='0'&&S[i-1]<='9')||(S[i-1]=='m'||S[i-1]=='k'||S[i-1]=='M'))) e3=i; } if(flag1&&flag2) { for(g=0,h=s1+2;h<=e1;h++) S1[g++]=S[h]; S1[g]='\0'; a=atof(S1); //cout<<a<<endl; if(S[e1-1]=='m') a=a*0.001; else if(S[e1-1]=='k') a=a*1000.0; else if(S[e1-1]=='M') a=a*1000000.0; for(g=0,h=s2+2;h<=e2;h++) S2[g++]=S[h]; S2[g]='\0'; //cout<<S[e1]; //cout<<S2<<endl; b=atof(S2); if(S[e2-1]=='m') b=b*0.001; else if(S[e2-1]=='k') b=b*1000.0; else if(S[e2-1]=='M') b=b*1000000.0; printf("Problem #%d\n",t); printf("P=%.2fW\n\n",a*b); } if(flag1&&flag3) { for(g=0,h=s3+2;h<=e3;h++) S1[g++]=S[h]; S1[g]='\0'; //cout<<S1; a=atof(S1); if(S[e3-1]=='m') a=a*0.001; else if(S[e3-1]=='k') a=a*1000.0; else if(S[e3-1]=='M') a=a*1000000.0; //cout<<a<<endl; for(g=0,h=s1+2;h<e1;h++) S2[g++]=S[h]; S2[g]='\0'; //cout<<S[e1]<<"啊"; //cout<<S2; b=atof(S2); if(S[e1-1]=='m') b=b*0.001; else if(S[e1-1]=='k') b=b*1000.0; else if(S[e1-1]=='M') b=b*1000000.0; printf("Problem #%d\n",t); printf("I=%.2fA\n\n",a/b); } if(flag2&&flag3) { for(g=0,h=s3+2;h<=e3;h++) S1[g++]=S[h]; S1[g]='\0'; //printf("e3=%d\n",e3); //cout<<S1; a=atof(S1); if(S[e3-1]=='m') {a=a*0.001;} else if(S[e3-1]=='k') {a=a*1000.0;} else if(S[e3-1]=='M') {a=a*1000000.0;} for(g=0,h=s2+2;h<=e2;h++) S2[g++]=S[h]; S2[g]='\0'; //cout<<S2; b=atof(S2); //cout<<b<<endl; if(S[e2-1]=='m') {b=b*0.001;} else if(S[e2-1]=='k') {b=b*1000.0;} else if(S[e2-1]=='M') {b=b*1000000.0;} //cout<<b; printf("Problem #%d\n",t); printf("U=%.2fV\n\n",a/b); } } //system("pause");}//2256
- poj 2256 P U I 字符串
- 练习:编写一个模板函数I n p u t
- c u b e l w i p works
- POJ 1051 P,MTHBGWB 简单字符串转换
- POJ 1051 P,MTHBGWB 简单字符串转换
- POJ 2752(不满足P[i]<>P[next[i]] 的next函数)
- 笔记本键盘问题 J K L M U I O P输入是数字
- 5 . 2 . 2 p u b l i c:接口访问
- f 4 c u b e s p i debug diary
- f 4 s p i debug 日记 c u b e
- diary of debug c u b e f 4 S P I
- poj 1051 P,MTHBGWB(字符串,较麻烦)
- G P U 研究
- mysql -u root -p
- i++与++i//*p++与*++p
- i++和++i以及*p++和*++p
- POJ 1961 字符串 KMP (i-next[i])
- *p=i; 与p=&i p++
- 随笔
- 两种获取connectionString的方式
- 在Android上运行python程序
- Linux内核调试技术指南
- 用opencv画两幅图片的直方图
- poj 2256 P U I 字符串
- 中断处理
- Latex写参考文献时的几点注意
- LiveAndroid - 不用买手机也能体验 Android 系统
- 2012-2-13
- 多态
- C++实现词典管理程序
- 数据结构-二叉树(2)
- java学习日记1