UVa1586 - Molar mass
【摘要】
//UVa1586 - Molar mass//给出一种由C, H, O, N 四种原子构成的分子式,求分子量//#define A1 //无法处理换行问题(scanf)//#define A2 //临界问题有BUG(sscanf)#define A3 //只考虑两位即可AC,直接暴力//#define A4 //考虑多位数有BUG #...
-
//UVa1586 - Molar mass
-
//给出一种由C, H, O, N 四种原子构成的分子式,求分子量
-
//#define A1 //无法处理换行问题(scanf)
-
//#define A2 //临界问题有BUG(sscanf)
-
#define A3 //只考虑两位即可AC,直接暴力
-
//#define A4 //考虑多位数有BUG
-
-
#ifdef A1
-
#include<stdio.h>
-
int main(){
-
//freopen("data.in","r",stdin);
-
int T;
-
scanf("%d",&T);
-
getchar();
-
while(T--){
-
char ch, ch2 = 'A'; int num; float M, ans = 0;
-
//无法处理换行问题
-
//while((ch2=getchar()) != EOF){
-
while(scanf("%c",&ch2) == 1){
-
if(ch2 == '\n'){if(ch >= 'C')ans += M; break;}
-
else ch = ch2;
-
if(ch == 'C') M = 12.01;
-
if(ch == 'H') M = 1.008;
-
if(ch == 'O') M = 16.00;
-
if(ch == 'N') M = 14.01;
-
if(scanf("%d",&num) != 1) ans += M;
-
else ans += M*num;
-
}
-
printf("%.3f\n", ans);
-
}
-
return 0;
-
}
-
#endif
-
-
#ifdef A2
-
#include<stdio.h>
-
#include<string.h>
-
#define maxn 20
-
int bits(int x){
-
if(x == 0)return 1;
-
int count = 0;
-
while(x>0){ count++; x/=10;}
-
return count;
-
}
-
int main(){
-
freopen("data.in","r",stdin);
-
int T;
-
scanf("%d",&T);
-
getchar();
-
while(T--){
-
int num; float M, ans = 0;
-
char str[maxn];
-
fgets(str,maxn,stdin);
-
//scanf("%s",str);
-
for(int i = 0; i<strlen(str); i++){
-
if(str[i] == 'C') M = 12.01;
-
if(str[i] == 'H') M = 1.008;
-
if(str[i] == 'O') M = 16.00;
-
if(str[i] == 'N') M = 14.01;
-
if(i == strlen(str)-1 && str[i]>='C'){ ans += M; break;}
-
if(sscanf(&str[i+1],"%d",&num) != 1) ans += M;
-
else {
-
i += bits(num);
-
ans += M*num;
-
}
-
}
-
printf("%.3f\n", ans);
-
}
-
return 0;
-
}
-
#endif
-
-
#ifdef A3
-
#include<stdio.h>
-
#include<string.h>
-
#include<ctype.h>
-
#define maxn 100
-
int main(){
-
//freopen("data.in","r",stdin);
-
int T;
-
scanf("%d",&T);
-
while(T--){
-
char s[maxn]; scanf("%s",s);
-
int n, a[4], len = strlen(s);
-
memset(a,0,sizeof(a));
-
for(int i = 0; i<len; i++){
-
if(s[i] == 'C') n = 0;
-
if(s[i] == 'H') n = 1;
-
if(s[i] == 'O') n = 2;
-
if(s[i] == 'N') n = 3;
-
if(s[i]>='C')
-
if(isdigit(s[i+1]) && isdigit(s[i+2])) a[n] += 10*(s[i+1]-'0')+(s[i+2]-'0');
-
else a[n] += isdigit(s[i+1])? s[i+1]-'0': 1;
-
}
-
printf("%.3f\n", 12.01*a[0]+1.008*a[1]+16.00*a[2]+14.01*a[3]);
-
}
-
return 0;
-
}
-
#endif
-
-
#ifdef A4
-
#include<stdio.h>
-
#include<string.h>
-
int co(int cot){int add42=1; while(--cot)add42 *= 10; return add42;}
-
int main(){
-
freopen("data.in","r",stdin);
-
int T;
-
scanf("%d",&T);
-
getchar();
-
while(T--){
-
char s[20];int a[4],n;
-
memset(a,0,sizeof(a));
-
//获取输入
-
scanf("%s",s);
-
//处理数据
-
for(int i = 0; i < strlen(s); i++){
-
if(s[i] > 57){//存储个数
-
if(s[i] == 'C'){n=0;a[n]++;}
-
if(s[i] == 'H'){n=1;a[n]++;}
-
if(s[i] == 'O'){n=2;a[n]++;}
-
if(s[i] == 'N'){n=3;a[n]++;}
-
}else{
-
int count = 0;//记录数字位数
-
for(int j = 0; ; j++){
-
if(s[i+j] <= 57)count++;
-
else break;
-
printf("%d\n",j);
-
}
-
while(count--){a[n] += (s[i+count]-'1')*co(count);printf("%d ",count);}
-
}
-
}
-
//输出
-
printf("%.3f\n",12.01*a[0]+1.008*a[1]+16.00*a[2]+14.01*a[3]);
-
}
-
return 0;
-
}
-
#endif
-
/*测试数据:
-
4
-
C
-
C6H5OH
-
NH2CH2COOH
-
C12H22O11
-
-
12.010
-
94.108
-
75.070
-
342.296
-
*/
-
文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。
原文链接:gwj1314.blog.csdn.net/article/details/54744418
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)