UVa1586 - Molar mass
2017-01-26 16:25
330 查看
//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] == 4000 '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 += 10*(s[i+1]-'0')+(s[i+2]-'0'); else a += 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 ++;} if(s[i] == 'H'){n=1;a ++;} if(s[i] == 'O'){n=2;a ++;} if(s[i] == 'N'){n=3;a ++;} }else{ int count = 0;//记录数字位数 for(int j = 0; ; j++){ if(s[i+j] <= 57)count++; else break; printf("%d\n",j); } while(count--){a += (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 */
相关文章推荐
- UVA 1586 Molar mass
- UVa 1586 - Molar mass
- uva 1586 Molar mass
- UVA 1586 - Molar mass
- UVA - 1586 Molar mass
- UVa 1585 Score / 1586 Molar Mass(遍历+计数)
- UVa 1586 Molar mass
- 分子量 (Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)
- UVa 1586 Molar mass
- UVa 1586 Molar mass
- UVa 1586 - Molar Mass
- uva1586----Molar mass
- UVa 1586 - Molar mass
- uva 1586 - Molar mass
- UVa 1586 - Molar mass(刷紫书)
- UVa 1586 Molar mass(分子量)
- UVa1586 Molar mass 分子量 (java版本)
- UVa 1586 - Molar Mass
- UVa 1586 - Molar mass【字符串】
- UVA 1586 - Molar mass