PAT 甲级20分的题目都较为简单。
PAT 1008题解
- 边输入边处理即可。
#include<iostream>
using namespace std;
const int maxn = 110;
int n;
int pre = 0;
int cur;
int res = 0;
int main(){
cin >> n;
for (int i = 0; i < n; i++){
cin >> cur;
if (cur >= pre)
res += (cur - pre)*6 + 5;
else
res += (pre - cur)*4 + 5;
pre = cur;
}
cout << res << endl;
return 0;
}
PAT 1019题解
#include<iostream>
#include<vector>
using namespace std;
int N, b;
vector<int> num;
int main(){
cin >> N >> b;
while (N){
num.push_back(N % b);
N /= b;
}
int len = num.size();
int flag = 1;
for (int i = 0; i <= len / 2; i++){
if (num[i] != num[len-1-i]){
cout << "No" << endl;
flag = 0;
break;
}
}
if (flag) cout << "Yes" << endl;
for (int j = len-1; j > 0; j--){
cout << num[j] << " ";
}
cout << num[0] << endl;
return 0;
}
PAT 1023
- 注意边界情况:如果输入的数为20位并且最高位*2还有进位的情况。
#include<iostream>
#include<string>
using namespace std;
const int maxn = 10;
int num[maxn] = {0};
int dounum[maxn] = {0};
string n;
string res = "";
int main(){
cin >> n;
int tmp, mod, c = 0;
for (int i = n.size() - 1; i >= 0; i--){
tmp = n[i] - '0';
num[tmp] += 1;
tmp = tmp * 2 + c;
c = tmp / 10; // 进位
mod = tmp % 10;
dounum[mod] += 1;
if (i != 0)
res = to_string(mod) + res;
else
res = to_string(tmp) + res;
}
bool flag = true;
for (int k = 1; k < 10; k++){
if (num[k] != dounum[k]){
cout << "No" << endl;
flag = false;
break;
}
}
if (flag) cout << "Yes" << endl;
cout << res << endl;
return 0;
}