PAT (Basic Level) Practise(中文)----30题解题报告(二)

2015-01-27 22:36:16 · 作者: · 浏览: 171
(~scanf(%s%s%s%s, s1, s2, s3, s4)) { int id = 0; for(int i = 0; s1[i] != ''; i++) if(s1[i] == s2[i] && s1[i] >= 'A' && s1[i] <= 'G') { day = s1[i]-'A'; id = i; break; } for(int i = id+1; s1[i] != ''; i++) if(s1[i] == s2[i]) { if(s1[i] >= 'A' && s1[i] <= 'N') { hour = s1[i]-'A'+10; break; } else if(s1[i] >= '0' && s1[i] <= '9') { hour = s1[i]-'0'; break; } } for(int i = 0; s3[i] != ''; i++) if(s3[i] == s4[i] && isalpha(s3[i])) { minute = i; break; } printf(%s %02d:%02d , DAY[day], hour, minute); } return 0; } 1015 分开成4种人,逐个进行排序

?

?

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; struct node { int id, df, cf; bool operator < (const node& rhs) const { if(df+cf != rhs.df+rhs.cf) return df+cf > rhs.df+rhs.cf; if(df != rhs.df) return df > rhs.df; return id < rhs.id; } }; vector
      
        one, two, thr, four; int N, L, H; int main() { int id, cf, df, c1, c2, c3, c4; while(~scanf(%d%d%d, &N, &L, &H)) { one.clear(); two.clear(); thr.clear(); four.clear(); while(N--) { scanf(%d%d%d, &id, &df, &cf); if(df < L || cf < L) continue; if(cf >= H && df >= H) one.push_back((node){id, df, cf}); else if(cf < H && df >= H) two.push_back((node){id, df, cf}); else if(cf < H && df < H && df >= cf) thr.push_back((node){id, df, cf}); else four.push_back((node){id, df, cf}); } sort(one.begin(), one.end()); sort(two.begin(), two.end()); sort(thr.begin(), thr.end()); sort(four.begin(), four.end()); c1 = one.size(); c2 = two.size(); c3 = thr.size(); c4 = four.size(); printf(%d , c1+c2+c3+c4); for(int i = 0; i < c1; i++) printf(%d %d %d , one[i].id, one[i].df, one[i].cf); for(int i = 0; i < c2; i++) printf(%d %d %d , two[i].id, two[i].df, two[i].cf); for(int i = 0; i < c3; i++) printf(%d %d %d , thr[i].id, thr[i].df, thr[i].cf); for(int i = 0; i < c4; i++) printf(%d %d %d , four[i].id, four[i].df, four[i].cf); } } 
      
     
    
   
  

?

1016 不解释

?

#include 
  
   
#include 
   
     using namespace std; int main() { int a, b, da, db; while(~scanf(%d%d%d%d, &a, &da, &b, &db)) { int ca = 0, cb = 0; while(a != 0) { if(da == a%10) ca++; a /= 10; } while(b != 0) { if(db == b%10) cb++; b /= 10; } int pa = 0, pb = 0; int x = 1; while(ca--) { pa += da*x; x *= 10; } x = 1; while(cb--) { pb += db*x; x *= 10; } printf(%d , pa+pb); } return 0; } 
   
  
1017 手算怎么算,你就怎么算,注意商为0

?

?

#include 
  
   
#include 
   
     using namespace std; int main() { char s[1010]; int n, b, a[1010], q[1010]; while(~scanf(%s%d, s, &b)) { for(n = 0; s[n] != ''; n++) a[n] = s[n]-'0'; if(n == 1 && a[0] < b) { printf(0 %d , a[0]); continue; } q[1] = 0; for(int i = 0; i < n-1; i++) { q[i] = a[i]/b; a[i+1] += a[i]%b*10; } q[n-1] = a[n-1]/b; if(q[0] != 0) printf(%d, q[0]); for(int i = 1; i < n; i++) printf(%d, q[i]); printf( %d , a[n-1]%b); } return 0; } 
   
  
1018 不解释

?

?

#include 
  
   
#include 
   
     using namespace std; int judge(char x, char y) { if(x == y) return 1; if((x == 'C' && y == 'J') || (x == 'J' && y == 'B') || (x == 'B' && y == 'C')) return 0; return 2; } int main() { //freopen(in.txt, r, stdin); int N, JS, JP, J[3], Y[3]; char JIA, YI; while(~scanf(%d, &N, &JIA)) { JS = JP = J[0] = J[1] = J[2] = Y[0] = Y[1] = Y[2] = 0; for(int i = 0; i < N; i++) { scanf( %c %c, &JIA, &YI); int ans = judge(JIA, YI); if(ans == 0) { JS++; if(JIA == 'C') J[1]++; else if(JIA == 'J') J[0]++; else if(JIA == 'B') J[2]++; } else if(ans == 1) { JP++; } else { if(YI == 'C') Y[1]++; else if(YI == 'J') Y[0]++; else if(YI == 'B') Y[2]++; } } printf(%d %d %d %d %d %d , JS, JP, N-JS-JP, N-JS-JP, JP, JS); int maxj = 0, maxy = 0, idj, idy; for(int i = 0; i < 3; i++) { if(maxj <= J[i]) { maxj = J[i]; idj = i; } if(maxy <= Y[i]) { maxy = Y[i]; idy = i; } } if(idj == 0) printf(J ); else if(idj == 1) printf(C ); else if(idj == 2) printf(B ); if(idy == 0) printf(J ); else if(idy == 1) printf(C ); else if(idy == 2) printf(B ); } return 0; } 
   
  
1019 注意一开始输入就是6174的情况

?

?

#include 
  
   
#include 
   
     #include 
    
      using namespace std; void getnum(int& x, int& a, int& b) { int num[5], n = 0; num[0] = num[1] = num[2] = num[3] = 0; while(x != 0) { num[n++] = x%10; x /= 10; } sort(num, num+4); a = num[3]*1000+num[2]*100+num[1]*10+num[0]; b = num[0]*1000+num[1]*100+num[2]*10+num[3]; x = a - b; } int main() { int a, b, x; while(~scanf(%d, &x)) { while(1) { getnum(x, a, b); printf(%04d - %04d = %04d , a, b, x); if(x == 0 || x == 6174) break; } } return 0; } 
    
   
  
1020 月饼单价排序

?

?

#include 
  
   
#include 
   
     #include 
    
      using namespace std; struct node { double sto, sell, price; bool operator < (const node& rhs) const { return price > rhs.price; } }MK[1010]; int N, D; int main() { while(~scanf(%d%d, &N, &D)) { for(int i = 0; i < N; i++) scanf(%lf, &MK[i].sto); for(int i = 0; i < N; i++) scanf(%lf, &MK[i].sell); for(int i = 0; i < N; i++) MK[i].price = MK[i].sell/MK[i].sto; sort(MK, MK+N); double res = 0; for(int i = 0; i < N; i++) { if(D <= MK[i].sto) { res += MK[i].price*D; break; } res += MK[i].sell; D -= MK[i].sto; } printf(%.2lf , res); } return 0; }
    
   
  

?

1021 不解释

?

#include 
  
   
#include 
   
     #include 
    
      using namespace std; int main() { char s[1010], num[11]; while(~scanf(%s, s)) { memset(num, 0, sizeof(num)); for(int i = 0; s[i] != ''; i++) num[s[i]-'0']++; for(int i = 0; i < 10; i++) if(num[i] != 0) printf(%d:%d , i, num[i]); } return 0; } 
    
   
  
1022 进制转换

?

?

#include 
  
   
#include 
   
     using namespace std; int main() { int dig[50], n, a, b, d; while(~scanf(%d%d%d, &a, &b, &d)) { int c = a+b; if(c == 0) { printf(0 ); continue; } n = 0; while(c != 0) { dig[n++] = c%d; c /= d; } for(int i = n-1; i >= 0; i--) printf(%d, dig[i]); printf( ); } return 0; } 
   
  
1023 先取个非0最小数,再把所有0跟上,然后其他所有数从小到大排。

?

?

#include 
  
   
#include 
   
     #include 
    
      using namespace std; int main() { int num[11]; while(~scanf(%d, &num[0])) { for(int i = 1; i <= 9; i++) scanf(%d, &num[i]); int id = 0; for(int i = 1; i <= 9; i++) if(num[i] != 0) { id = i; break; } printf(%d, id); num[id]--; while(num[0]--) cout << 0; for(int i = 1; i <= 9; i++) { while(num[i]--) cout << i; } cout << endl; } return 0; } 
    
   
  
1024 科学计数法

?

指数为正式,主要问题在于判断小数点最后变到了哪里。

指数为负时,主要问题在于前面加上几个0。

有很多细节要注意。

?

#include 
  
   
#include 
   
     #include 
    
      using namespace std; char s[10010]; int main() { //freop