Read Me!


本網誌之內容皆可自由複製
唯須標明出處且不可作商業用途

2016年7月12日 星期二

UVa 1586 Molar Mass

UVa 1586 Molar Mass



題意:

輸入一個分子式算出分子量

題解:


輸入的分子式含有C、O、N、H四個元素
係數不超過99


//UVa 1586 - Molar Mass
#include <cstdio>
#include <cstring>
#include <cctype> //用到isAlpha(), isDigit()
const double C = 12.010;
const double H = 1.008;
const double N = 14.010;
const double O = 16.000;
void add(char emt, int mole, double& mass) {
switch (emt) {
case 'C' :
mass += C*mole;
break;
case 'H':
mass += H*mole;
break;
case 'N':
mass += N*mole;
break;
case 'O':
mass += O*mole;
break;
default:
break;
}
}
int main() {
int t;
scanf("%d", &t);
for (int i = 0; i < t; ++i) {
char molar[85];
double mass = 0;
scanf("%s", molar);
int len = strlen(molar);
for (int j = 0; j < len; ++j) {
char emt = molar[j];
char p1 = molar[j+1], p2 = molar[j+2]; //係數十位與個位
if(isalpha(emt)) { //先判斷是否為字母,false表示是係數
if(isdigit(p1)) { //判斷是否有係數
if(isdigit(p2)) { //再判斷是否為雙位係數
add(emt, (p1 - '0')*10 + (p2 - '0'), mass);
j = j+2; //增加效率(可省略)
} else {
add(emt, p1 - '0', mass);
j++;
}
} else { //沒係數表示係數是1
add(emt, 1, mass);
}
}
}
printf("%.3f\n", mass);
}
return 0;
}
view raw MolarMass.cpp hosted with ❤ by GitHub

2016年7月11日 星期一

UVa 10340 All in all

UVa 10340 All in all


題意:

輸入一個 目標字串A 和一個 字串B
求是否可以透過刪除 B 中的字元來得到 A


解題:

很簡單,按照目標字串的順序來搜尋就好了

這邊運用了字串結尾是虛字元'\0'(ACSII碼=0)
及c/c++ 0=false的規定

//UVa 10340 All in all
#include <cstdio>
#include <cstring>
char sub[100000], str[100000];
int main() {
while(scanf("%s%s", sub, str) == 2) {
int j = 0;
for (int i = 0; str[i]; ++i) {
if(str[i] == sub[j]) j++;
}
printf("%s\n", sub[j] ? "Yes" : "No");
}
return 0;
}
view raw AllInAll.cpp hosted with ❤ by GitHub

2016年7月9日 星期六

新網誌

我的新網誌來囉!
這裡將會貼一些和程式有關的東西~
包括UVa的解題之類的
敬請期待囉!