PAT b1031-b1035题解

xiaoxiao2021-02-28  93

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; }
转载请注明原文地址: https://www.6miu.com/read-46624.html

最新回复(0)