网址:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2411
山东省第三届ACM省赛的题。
注意点:
1、小数点可以没有,用小数点和星号做分隔符的可以省省了。
2、空格没说几个,用getline()相当麻烦,不如手动输入字符串数组。
3、inches不是唯一分隔符,手机名称中可能带inches字样,所以应该find_last_of("inches")(我没有用这个方法)
4、注意0.00的结果。
5、手机名称中如果有N个空格 输出的时候输出一个空格。
#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<list>
#include<queue>
#include<vector>
#define LL long long
#define inf 0x7fffffff
#define E 1e-11
#define M 100
#define N 1000
using namespace std;
int m,n,t;
char str[N][N];
int ok(char *str)
{
if(strcmp(str,"inches")==0)return 1;
return 0;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ex.in","r",stdin);
#endif
scanf("%d%*c",&t);
int ncase=0;
while(t--)
{
double d;
int n=0;
int sub;
while(scanf("%s",str[n])!=EOF)
{
if(ok(str[n]))
{
sub=n;//不能退出
}
n++;
char c=getchar();
if(c=='\n')break;
}
double a,b;
sscanf(str[sub+1],"%lf*%lf",&a,&b);
sscanf(str[sub-1],"%lf",&d);
for(int i=sub+2; i<n; i++)
for(int j=0; str[i][j]; j++)
str[i][j]=tolower(str[i][j]);
printf("Case %d: The ",++ncase);
for(int i=sub+2; i<n; i++)
printf("%s ",str[i]);
printf("of");
for (int i=0; i<sub-1; ++i )
printf(" %s",str[i]);
if(fabs(d)<E)/WA
printf("'s PPI is %.2lf.\n",0.00);
else
printf("'s PPI is %.2lf.\n",sqrt((a*a+b*b))/d);
}
return 0;
}