PAT b1031-b1035题解

来源:互联网 发布:eclipse怎么编写java 编辑:程序博客网 时间:2024/06/01 09:06

1、b1031

#include <cstdio>#include <cstring>int w[20] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};char change[15] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};int main(){int n;scanf("%d", &n);bool flag = true;char str[20];for(int i = 0; i < n; i++){scanf("%s", str);int j, last = 0;for(j = 0; j < 17; j++){if(!(str[j] >= '0' && str[j] <= '9'))break;last = last + (str[j] - '0') * w[j];}if(j < 17){flag = false;printf("%s\n", str);}else{if(change[last % 11] != str[17]){flag = false;printf("%s\n", str);}}}if(flag == true){printf("All passed\n");}return 0;}

2、b1032

#include <cstdio>const int MAXN = 100005;int main(){int a[MAXN] = {0};int n;int index;int max = -1;scanf("%d", &n);for(int i = 0; i < n; i++){int schoolNum, score;scanf("%d%d", &schoolNum, &score);a[schoolNum] += score;}for(int i = 0; i < 100005; i++){if(a[i] > max){max = a[i];index = i;}}printf("%d %d", index, max);} 


3、b1033

#include <cstdio>#include <cstring>const int maxn = 100010;bool hashTable[256];char str[maxn];int main(){memset(hashTable, true, sizeof(hashTable));gets(str);int len = strlen(str);for(int i = 0; i < len; i++){if(str[i] >= 'A' && str[i] <= 'Z'){str[i] = str[i] + 32;}hashTable[str[i]] = false;}gets(str);len = strlen(str);for(int i = 0; i < len; i++){if(str[i] >= 'A' && str[i] <= 'Z'){int low = str[i] + 32;if(hashTable[low] == true && hashTable['+'] == true){printf("%c", str[i]);}}else if(hashTable[str[i]] == true){printf("%c", str[i]);}}printf("\n");return 0;} 

4、b1034

#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;ll gcd(ll a, ll b){return b == 0 ? a : gcd(b, a % b);}struct Fraction{ll up, down;}a, b;Fraction reduction(Fraction result){if(result.down < 0){result.up = -result.up;result.down = -result.down;}if(result.up == 0){result.down = 1;}else{int d = gcd(abs(result.up), abs(result.down));result.up /= d;result.down /= d;}return result;}Fraction add(Fraction f1, Fraction f2){Fraction result;result.up = f1.up * f2.down + f2.up * f1.down;result.down = f1.down * f2.down;return reduction(result);}Fraction minu(Fraction f1, Fraction f2){Fraction result;result.up = f1.up * f2.down - f2.up * f1.down;result.down = f1.down * f2.down;return reduction(result);}Fraction multi(Fraction f1, Fraction f2){Fraction result;result.up = f1.up * f2.up;result.down = f1.down * f2.down;return reduction(result);}Fraction divide(Fraction f1, Fraction f2){Fraction result;result.up = f1.up * f2.down;result.down = f1.down * f2.up;return reduction(result);}void showResult(Fraction r){r = reduction(r);if(r.up < 0) printf("(");if(r.down == 1) printf("%lld", r.up);else if(abs(r.up) > r.down){printf("%lld %lld/%lld", r.up / r.down, abs(r.up) % r.down, r.down);}else{printf("%lld/%lld", r.up, r.down);}if(r.up < 0) printf(")");}int main(){scanf("%lld/%lld %lld/%lld", &a.up, &a.down, &b.up, &b.down);showResult(a);printf(" + ");showResult(b);printf(" = ");showResult(add(a, b));printf("\n");showResult(a);printf(" - ");showResult(b);printf(" = ");showResult(minu(a, b));printf("\n");showResult(a);printf(" * ");showResult(b);printf(" = ");showResult(multi(a, b));printf("\n");showResult(a);printf(" / ");showResult(b);printf(" = ");if(b.up == 0) printf("Inf");else showResult(divide(a, b));return 0; }

5、b1035

#include <cstdio>#include <algorithm>using namespace std;const int N = 111;int origin[N], tempOri[N], changed[N];int n;bool isSame(int A[], int B[]){for(int i = 0; i < n; i++){if(A[i] != B[i]) return false;} return true;}bool showArray(int A[]){for(int i = 0; i < n; i++){printf("%d", A[i]);if(i < n - 1) printf(" ");}printf("\n");}bool insertSort(){bool flag = false;for(int i = 1; i < n; i++){if(i != 1 && isSame(tempOri, changed)){flag = true;}int temp = tempOri[i], j = i;while(j > 0 && tempOri[j - 1] > temp){tempOri[j] = tempOri[j - 1];j--;}tempOri[j] = temp;if(flag == true){return true;}}return false;}void mergeSort(){bool flag = false;for(int step = 2; step / 2 <= n; step *= 2){if(step != 2 && isSame(tempOri, changed)){flag = true;}for(int i = 0; i < n; i += step){sort(tempOri + i, tempOri + min(i + step, n));}if(flag == true){showArray(tempOri);return;}}} int main(){scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%d", &origin[i]);tempOri[i] = origin[i];}for(int i = 0; i < n; i++){scanf("%d", &changed[i]);}if(insertSort()){printf("Insertion Sort\n");showArray(tempOri);}else{printf("Merge Sort\n");for(int i = 0; i < n; i++){tempOri[i] = origin[i];}mergeSort();}return 0;}