PAT乙級 部分A+B(三種處理方式)
阿新 • • 發佈:2018-12-04
部分A+B (15 分)
題目描述:
正整數 A 的“DA(為 1 位整數)部分”定義為由 A 中所有 DA 組成的新整數 PA。例如:給定 A=3862767,DA=6,則 A 的“6 部分”PA 是 66,因為 A 中有 2 個 6。
現給定 A、DA、B、DB,請編寫程式計算 PA+PB。
輸入格式:
輸入在一行中依次給出 A、DA、B、DB,中間以空格分隔,其中 0<A,B<1010。
輸出格式:
在一行中輸出 PA+PB 的值。
輸入樣例 1:
3862767 6 13530293 3
輸出樣例 1:
399
輸入樣例 2:
3862767 1 13530293 8
輸出樣例 2:
0
解法一思路&AC程式碼:
Python大法好啊,倆行程式碼AC。第一行程式碼不需要解釋,第二行程式碼可以分解成三個步驟來理解:①呼叫字串中的count函式得到字串A中子字元Da的數量,用這個數量乘以字元Da,就可以得到題目中的Pa;②同理,呼叫字串中的count函式得到字串B中子字元Db的數量,用這個數量乘以字元Db,就可以得到題目中的Pb;③把Pa和Pb強制轉換成int型再相加就能得到最後的結果。
A,Da,B,Db = input().split()
print(int(A.count(Da)*Da or "0") + int(B.count(Db)*Db or "0"))
解法二思路&AC程式碼:
這是我用C++求解的第一種思路,跟Python的思路大致相同。這裡解釋一下string型強制轉換成int型的程式碼,atoi(Pa.c_str())。由於函式原型是int atoi(const char *nptr),所以在呼叫的過程中應該先用c_str()把string型轉換成char*的字串,再通過atoi來轉換成int型。
#include <bits/stdc++.h> using namespace std; int main() { string A,B; char Da,Db; cin >> A >> Da >> B >> Db; string Pa="",Pb=""; for(int i=0;i<A.length();i++) { if(A[i] == Da) { Pa += Da; } } for(int i=0;i<B.length();i++) { if(B[i] == Db) { Pb += Db; } } int sum = atoi(Pa.c_str()) + atoi(Pb.c_str()); //string型強制轉換成int型再相加 cout << sum << endl; return 0; }
解法三思路&AC程式碼:
其實這三種解法思路都差不多,就是細節處理有區別。這段程式碼中Pa和Pb都是int型,無需像前倆種解法一樣進行string型到int型的強制轉換,直接在遍歷字串的同時完成Pa和Pb的累加。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string A,B;
char Da,Db;
cin >> A >> Da >> B >> Db;
int Pa = 0,Pb = 0;
for(int i=0;i<A.length();i++)
{
if(A[i] == Da)
{
Pa = Pa*10 + (Da-'0');
}
}
for(int i=0;i<B.length();i++)
{
if(B[i] == Db)
{
Pb = Pb*10 + (Db-'0');
}
}
int sum = Pa + Pb;
cout << sum << endl;
return 0;
}