UvaOJ 537 - Artificial Intelligence?
2014-08-07 15:33
232 查看
第一次写题解,好激动,以后要常写呢,最近在做刘汝佳白书的习题,慢慢进步吧。
总结:
1.一定注意在输入第一个数字后加getchar();//还可以直接写为scanf("%d%*c",%time1)。2.scanf("%s",buf);读取的是一个连贯的字符串,不能读带空格的一整行。
此处我用的是cin.getline(buf,N,'\n');且此处会自动吧\n处改为\0。
3.如果首次测试程序时,如果闪退的话,应将其改为不循环的程序,一处一处修改。
4.每次循环开始时记得把某些数据归0,这个地方经常出错。
5.OJ里面的多组数据测试,输出结果可以不用数组记录结果,可以减少工作量。
下面贴自己的代码(找标准答案的请往下面看):
#include<iostream> #include <cstdio> #include<string.h> #include<math.h> using namespace std; const int N=1e6; char buf ={'\0'}; int numq ,numh ; double num1,num2; int time1,len,i,a,b,flag1=0,flag2=0; char rn1,pr1,un1,rn2,pr2,un2; int main() { cin>>time1; getchar(); for(int tt=1;tt<=time1;tt++) { //memset(buf,'\0',sizeof(buf)); cin.getline(buf,N,'\n'); //scanf("%s",buf); len=strlen(buf); for(i=0;i<len;i++) { if(buf[i]=='='&&flag2==0) { rn1=buf[i-1]; a=0;b=0;flag1=0; while(1) { i++; if(buf[i]<='9'&&buf[i]>='0'&&flag1==0) numq[a++]=buf[i]-'0'; if(buf[i]=='.') flag1=1; if(buf[i]<='9'&&buf[i]>='0'&&flag1!=0) numh[b++]=buf[i]-'0'; if(buf[i]=='m'||buf[i]=='k'||buf[i]=='M') pr1=buf[i]; if(buf[i]=='V'||buf[i]=='W'||buf[i]=='A') { un1=buf[i]; break; } } num1=0; for(int nnn=0;nnn<a;nnn++) num1+=numq[nnn]*pow(10.0,a-nnn-1); for(int nnn=0;nnn<b;nnn++) num1+=numh[nnn]*pow(0.1,nnn+1); if(pr1=='m') {num1=num1*0.001; pr1='0';} if(pr1=='k') {num1=num1*1000; pr1='0';} if(pr1=='M') {num1=num1*1e6; pr1='0';} flag2=1; } if(buf[i]=='='&&flag2==1) { rn2=buf[i-1]; a=0;b=0;flag1=0; while(1) { i++; if(buf[i]<='9'&&buf[i]>='0'&&flag1==0) numq[a++]=buf[i]-'0'; if(buf[i]=='.') flag1=1; if(buf[i]<='9'&&buf[i]>='0'&&flag1!=0) numh[b++]=buf[i]-'0'; if(buf[i]=='m'||buf[i]=='k'||buf[i]=='M') pr2=buf[i]; if(buf[i]=='V'||buf[i]=='W'||buf[i]=='A') { un2=buf[i]; break; } } num2=0; for(int nnn=0;nnn<a;nnn++) num2+=numq[nnn]*pow(10.0,a-nnn-1); for(int nnn=0;nnn<b;nnn++) num2+=numh[nnn]*pow(0.1,nnn+1); if(pr2=='m') {num2=num2*0.001; pr2='0';} if(pr2=='k') {num2=num2*1000; pr2='0';} if(pr2=='M') {num2=num2*1e6; pr2='0';} //flag2=1; flag2=0; break; } } if(rn1=='U'&&rn2=='I'||rn1=='I'&&rn2=='U') { cout<<"Problem #"<<tt<<endl; printf("P=%.2lfW\n\n",num1*num2); } if(rn1=='U'&&rn2=='P') { cout<<"Problem #"<<tt<<endl; printf("I=%.2lfA\n\n",num2/num1); } if(rn2=='U'&&rn1=='P') { cout<<"Problem #"<<tt<<endl; printf("I=%.2lfA\n\n",num1/num2); } if(rn1=='I'&&rn2=='P') { cout<<"Problem #"<<tt<<endl; printf("U=%.2lfV\n\n",num2/num1); } if(rn2=='I'&&rn1=='P') { cout<<"Problem #"<<tt<<endl; printf("U=%.2lfV\n\n",num1/num2); } //cout<<num1<<endl; //cout<<num2<<endl; } return 0; }
再贴网上的代码(学着点,好简洁):
#include <stdio.h> #include <string.h> #define M 3 #define N 1000 char ch[] = "PUI"; char pref[] = "mkM"; char unit[] = "WVA"; double rate[M] = {0.001, 1000.00, 1000000.00}; double v[M]; char mark[M], line , prefch; int main(void) { int tc, k, i, j; char *p; scanf("%d%*c", &tc); for (k = 0; k != tc; k++) { memset(mark, 0, sizeof (mark)); fgets(line, sizeof (line), stdin); for (p = line; *p != '\n'; p++) if (*p == '=') { for (i = 0; ch[i] != *(p-1); i++) ; mark[i] = 1; sscanf(p+1, "%lf%c", &v[i], &prefch); for (j = 0; j != M; j++) if (pref[j] == prefch) v[i] *= rate[j]; } for (i = 0; mark[i] != 0; i++) ; if (0 == i) v[0] = v[1]*v[2]; /* P = U*I */ else if (1 == i) v[1] = v[0]/v[2]; /* U = P/I */ else v[2] = v[0]/v[1]; /* I = P/U */ printf("Problem #%d\n%c=%.2f%c\n\n", k+1, ch[i], v[i], unit[i]); } return 0; }
相关文章推荐
- UVAOJ 537 ——Artificial Intelligence? 模拟
- UVAOJ 537字符串处理
- UVaOJ 537 - Artificial Intelligence?
- UVaOJ 537 - Artificial Intelligence?
- UvaOJ 537 - Artificial Intelligence?
- UvaOJ 537 - Artificial Intelligence?
- UVaOJ 537
- UVaOJ 401 Palindromes
- uvaoj 489 - Hangman Judge
- SRM 537 DIV2
- UvaOJ 10879 - Code Refactoring
- [UvaOJ - Getting Started] 494 - Kindergarten Counting Game
- UVaOJ 10152 - ShellSort
- UVaOJ 10305 - Ordering Tasks
- UVaOJ 10986 - Sending email
- UVaOJ 489 - Hangman Judge
- UvaOJ 10010 - Where's Waldorf?
- UVaOJ 10420 - List of Conquests
- uvaoj10010
- UVaOJ10562---Undraw the Trees