一道有关字符串处理i的题目,很普通,只要注意下一个元素后面的数字的统计就行了,因为题目数 2<N<99 所以只要判断出来他是一位数还是两位数就行了,
切记flag标记,一开始掉了flag==1的判断,调了10分钟,QAQ
这个是我一开始的错误代码,,还没出来~
# include<cstdio>
# include<iostream>
# include<cstring>
using namespace std;
# define MAX 100
char s[MAX];
int main(void)
{
int t;
cin>>t;
while ( t-- )
{
int k1 = 0;
int k2 = 0;
int k3 = 0;
int k4 = 0;
scanf("%s",s);
int n = strlen(s);
double sum = 0;
for ( int i = 0;i < n;i++ )
{
if ( s[i] == 'C' )
{
if ( (s[i+1]<='9'&&s[i+1]>='1') )
{
if (s[i+2]<='9'&&s[i+2]>='1')
{
k1 = s[i+1]*10+s[i+2];
}
else
k1 = s[i+1];
}
else
k1 = 1;
}
if ( s[i] == 'H' )
{
if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]<='9'&&s[i+2]>='1') )
{
k2 = s[i+1]*10+s[i+2];
}
else if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]=='C'||s[i+2]=='O'
||s[i+2]=='N') )
{
k2 = s[i+1];
}
else
k2 = 1;
}
if ( s[i] == 'O' )
{
if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]<='9'&&s[i+2]>='2') )
{
k3 = s[i+1]*10+s[i+2];
}
else if ( (s[i+1]<='9'&&s[i+1]>='1')&&(s[i+2]=='H'||s[i+2]=='C'
||s[i+2]=='N') )
{
k3 = s[i+1];
}
else
k3 = 1;
}
if ( s[i] == 'N' )
{
if ( s[i+1]<='9'&&s[i+1]>='1'&&s[i+2]<='9'&&s[i+2]>='1' )
{
k4 = s[i+1]*10+s[i+2];
}
else if ( s[i+1]<='9'&&s[i+1]>='1'&&(s[i+2]=='H'||s[i+2]=='O'
||s[i+2]=='C') )
{
k4 = s[i+1];
}
else
k4 = 1;
}
}
cout<<k1<<endl;
cout<<k2<<endl;
cout<<k3<<endl;
cout<<k4<<endl;
sum = k1*12.01+k2*1.008+k3*16.00+k4*14.01;
printf("%.3lfg/mol\n",sum);
}
return 0;
}
# include<cstdio>
# include<iostream>
# include<cstring>
using namespace std;
# define MAX 100
char s[MAX+10];
double a[MAX+10];
int g ( int x,int y )
{
int t;
for ( int i = x;i < y;i++ )
{
if ( s[i] <= '9'&&s[i] >= '0' )
t = i;
else
break;
}
int sum = 0;
for ( int i = x;i <= t;i++ )
{
sum = sum*10+( s[i] - '0' );
}
return sum-1;
}
int main(void)
{
int t;cin>>t;
while ( t-- )
{
scanf("%s",s);
int len = strlen(s);
int flag = 0;
for ( int i = 0;i < len;i++ )
{
if ( s[i] == 'C' )a[i] = 12.01;
if ( s[i] == 'H' )a[i] = 1.008;
if ( s[i] == 'O' )a[i] = 16.00;
if ( s[i] == 'N' )a[i] = 14.01;
if ( s[i] >= '1' && s[i] <= '9'&&flag == 0 )
{//flag = 0一定要切记!,调了10分钟 QAQ
flag = 1;
a[i] = a[i-1]*g(i,len);
}
if ( !( s[i] >= '0'&&s[i] <= '9') )flag = 0;
}
double sum1 = 0;
for ( int i = 0;i < len;i++ )
{
//cout<<a[i]<<endl;
sum1+=a[i];
}
printf("%.3lf\n",sum1);
}
return 0;
}