pat (basic level)题解
想要锻炼自己的代码能力,看自己能否用最简练的代码AC。下面开始:
1006
简单的字符转换没什么难度
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n; 5 cin >> n; 6 int bai,shi,ge; 7 bai = n / 100; 8 shi = (n - bai * 100) / 10; 9 ge = n % 10; 10 for(int i = 0; i < bai; i ++){ 11 cout << 'B'; 12 } 13 for(int i = 0; i < shi; i++){ 14 cout << 'S'; 15 } 16 for(int i = 0; i < ge; i++){ 17 cout << i + 1; 18 } 19 return 0; 20 }
1007
这里主要是不要偷懒质数一定要循环到sqrt(n)才好,其次是要判定i+2有没有越界这是个坑要注意。
1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 bool check(int n){ 5 bool flag = true; 6 for(int i = 2; i <= sqrt(n); i++){ 7 if(n % i == 0){ 8 flag = false; 9 break; 10 } 11 } 12 return flag; 13 } 14 int main(){ 15 int n; 16 cin >> n; 17 int sum = 0; 18 for(int i = 2; i < n; i++){ 19 if(check(i)){ 20 if(check(i + 2) && (i + 2) <= n) ++sum; 21 } 22 } 23 cout << sum; 24 return 0; 25 }
1008逻辑移位,注意取模
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n, m; 5 cin >>n >>m; 6 int a[n]; 7 for(int i = 0; i < n; i++){ 8 cin >> a[i]; 9 } 10 int t = (-m % n) + n; 11 for(int i = 0; i < n; i++){ 12 cout << a[((t + i) % n)]; 13 if(i == n - 1) continue; 14 cout << " "; 15 } 16 return 0; 17 }
1009 字符串处理,注意单行读入
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main(){ 5 string s; 6 string t; 7 getline(cin,s); 8 t = s; 9 int length = t.length(); 10 while(t.find(' ') >= 0 && t.find(' ') < length){ 11 int pos = t.rfind(' '); 12 cout << t.substr(pos + 1) << ' '; 13 t = t.substr(0, pos); 14 length = pos - 1; 15 } 16 cout << t; 17 return 0; 18 }
1010 难点在于无结束标志的数字读入
scanf("%d%d", &n, &e) != EOF
1 #include<stdio.h> 2 using namespace std; 3 int main(){ 4 int n, e, flag = 0; 5 while(scanf("%d%d", &n, &e) != EOF){ 6 if(n * e){ 7 if(flag){ 8 printf(" "); 9 } 10 else flag = 1; 11 printf("%d %d", n * e, e - 1); 12 } 13 } 14 if(!flag) printf("0 0"); 15 return 0; 16 }
1011 此题涉及大数字运算可以用long long来计算
1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 int main(){ 5 int n; 6 long long a, b, c; 7 cin >> n; 8 for(int i = 0; i < n; i++){ 9 cin >> a >> b >> c; 10 if(a + b > c) printf("Case #%d: true\n", i + 1); 11 else printf("Case #%d: false\n", i + 1); 12 } 13 return 0; 14 15 }
1012 简单的判断,考察浮点数的保留小数位数
1 #include<iostream> 2 #include <iomanip> 3 using namespace std; 4 int main(){ 5 int n; 6 cin >> n; 7 int x; 8 int a[6] ={0}; 9 double a4sum = 0; 10 int sign = 1; 11 bool flag[6] = {true,true,true,true,true,true}; 12 while(n--){ 13 cin >> x; 14 if(x % 10 == 0) { 15 a[1] += x; 16 flag[1] = false; 17 } 18 if(x % 5 == 1) { 19 a[2] += x * sign; 20 sign = -sign; 21 flag[2] = false; 22 } 23 if(x % 5 == 2){ 24 flag[3] = false; 25 ++a[3]; 26 } 27 if(x % 5 == 3){ 28 ++a[4]; 29 a4sum += x; 30 flag[4] = false; 31 } 32 if(x % 5 == 4){ 33 if(x > a[5]) a[5] = x; 34 flag[5] = false; 35 } 36 } 37 for(int i = 1; i <= 5; i++){ 38 if(!flag[i]){ 39 if(i == 4) cout << setprecision(1) << fixed << (a4sum / a[4]); 40 else cout << a[i]; 41 }else{ 42 cout << "N"; 43 } 44 if(i != 5) cout << " "; 45 } 46 return 0; 47 }
1013 考察换行,没有难度
1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 bool check(int n){ 5 bool flag = true; 6 for(int i = 2; i <= sqrt(n); i++){ 7 if(n % i == 0){ 8 flag = false; 9 break; 10 } 11 } 12 return flag; 13 } 14 int main(){ 15 int m, n; 16 cin >> m >> n; 17 int count = 0; 18 int i = 1; 19 while(count < n){ 20 if(check(++i)){ 21 ++count; 22 if(count >= m){ 23 if((count - m) % 10 != 0) cout << ' '; 24 cout << i; 25 if((count - m) % 10 == 9)cout <<endl; 26 } 27 28 } 29 } 30 }
1016.简单题,考察取位
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int a, da, b, db, pa, pb; 5 cin >> a >> da >> b >>db; 6 pa = 0; 7 pb = 0; 8 while(a != 0){ 9 if(a % 10 == da){ 10 pa = pa * 10 + da; 11 } 12 a /= 10; 13 } 14 while(b != 0){ 15 if(b % 10 == db){ 16 pb = pb * 10 + db; 17 } 18 b /= 10; 19 } 20 cout << pa + pb; 21 return 0; 22 }
1017. 简单的除法模拟
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main(){ 5 string a; 6 int b; 7 int index, left; 8 int first,temp; 9 cin >> a >> b; 10 first = 0; 11 temp = a[0] -'0'; 12 first = temp / b; 13 left = temp % b; 14 if(a.size() == 1) cout << first; 15 else if(first != 0) cout << first; 16 for(int i = 1; i < a.size(); i++){ 17 temp = left * 10 + (a[i] - '0'); 18 cout << temp / b; 19 left = temp % b; 20 } 21 cout << ' ' << left; 22 return 0; 23 }
1019. 要用到简单的排序,注意首位有0的情况
1 #include<iostream> 2 using namespace std; 3 int getmax(int a[]){ 4 for(int i = 1; i < 4; i++){ 5 for(int j = 0; j < i; j++){ 6 if(a[j] < a[i]) { 7 int n = a[j]; 8 a[j] = a[i]; 9 a[i] = n; 10 } 11 } 12 } 13 int result = 0; 14 for(int i = 0; i < 4; i++){ 15 result = result * 10 + a[i]; 16 } 17 return result; 18 } 19 int getmin(int a[]){ 20 for(int i = 1; i < 4; i++){ 21 for(int j = 0; j < i; j++){ 22 if(a[j] > a[i]) { 23 int n = a[j]; 24 a[j] = a[i]; 25 a[i] = n; 26 } 27 } 28 } 29 int result = 0; 30 for(int i = 0; i < 4; i++){ 31 result = result * 10 + a[i]; 32 } 33 return result; 34 } 35 void print(int n){ 36 int a[4]={0}; 37 for(int i = 3; i >= 0; i--){ 38 a[i] = n % 10; 39 n /= 10; 40 } 41 for(int i = 0; i < 4; i++){ 42 cout << a[i]; 43 } 44 } 45 int main(){ 46 int n = 0; 47 cin >> n; 48 int a[4] ={0}; 49 int result; 50 result = -1; 51 while(result !=0 && result != 6174){ 52 for(int i = 0; i < 4; i++){ 53 a[i] = n % 10; 54 n /= 10; 55 } 56 int max = getmax(a); 57 print(max); 58 cout << " - "; 59 int min = getmin(a); 60 print(min); 61 cout << " = "; 62 result = max - min; 63 print(result); 64 cout << endl; 65 n = result; 66 } 67 68 }
1022.简单的取余运算,注意基数为0的情况
1 #include<iostream> 2 using namespace std; 3 void F(long long n,int m) 4 { 5 int a[10000]; 6 int index = 0; 7 while(n != 0){ 8 a[index++] = n % m; 9 n = n / m; 10 } 11 for(int i = index - 1; i >= 0; i--){ 12 cout << a[i]; 13 } 14 return ; 15 } 16 int main(){ 17 long long n,m; 18 int base; 19 cin >> n >> m >> base; 20 if(n == 0 || m ==0) cout << 0; 21 else F(n + m,base); 22 }

浙公网安备 33010602011771号