PAT
(Basic Level) Practice
1001-1110(已更新至最新)
1001-1100
链接:https://pan.baidu.com/s/1Zs7rZn_Z3fyARkwUusviJA
提取码:xkyq
1101-1110
链接:https://pan.baidu.com/s/1hR8bLuuWiDYb2z9XnRxpOQ
提取码:c2yj
1001 卡拉兹(Callatz)(3n+1)猜想 (15 分)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int step = 0 ;
while(n!=1){
if(n % 2 == 0){
n = n / 2;
}else{
n = 3 * n + 1;
n = n / 2;
}
step++;
}
cout << step << endl;
return 0;
}
1002 写出这个数 (20 分)
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
int total = 0;
for(int i=0;i<s.size();i++){
total += s[i] - '0';
}
int a[3];
bool flag = false;
a[0] = total / 100;
a[1] = total / 10 % 10;
a[2] = total % 10;
if(a[0]==0 && a[1]!=0){
a[0] = -1;
}else if(a[0]==0 && a[1]==0){
a[0] = -1;
a[1] = -1;
}
for(int i=0;i<3;i++){
switch(a[i]){
case 0:cout << "ling";break;
case 1:cout << "yi";break;
case 2:cout << "er";break;
case 3:cout <<"san";break;
case 4:cout <<"si";break;
case 5:cout <<"wu";break;
case 6:cout <<"liu";break;
case 7:cout <<"qi";break;
case 8:cout <<"ba";break;
case 9:cout <<"jiu";break;
default:break;
}
if(i==2){
}else{
if(a[i]==-1){
}else{
cout <<" ";
}
}
}
return 0;
}
1003 我要通过! (20 分)
#include<bits/stdc++.h>
using namespace std;
int isPTA(string s){
int flag = 1;
for(int i=0;i<s.size();i++){
if(s[i] == 'P' || s[i] == 'A' || s[i] == 'T'){
continue;
}else{
flag = 0;
break;
}
}
return flag;
}
int isR2(string s){
int site;
for(int i=0;i<s.size();i++){
if(s[i] == 'P'){
site = i;
break;
}else if(s[i]!='A'){
return 0;
}
}
if(s[site] == 'P' && s[site+1] == 'A' && s[site+2] == 'T'){
}else{
return 0;
}
if(s.size()-site-3!=site){
return 0;
}
for(int i=site+3;i<s.size();i++){
if(s[i]!='A'){
return 0;
}
}
return 1;
}
int isR3(string s){
int site1;
int site2;
int cnt = 0;
for(int i=0;i<s.size();i++){
if(s[i] == 'P'){
site1 = i;
break;
}else if(s[i]!='A'){
return 0;
}
}
for(int i=site1+1;i<s.size();i++){
if(s[i] == 'T'){
site2 = i;
break;
}else if(s[i] =='A'){
cnt++;
}else{
return 0;
}
}
if(!cnt){
return 0;
}else{
site1 *= cnt;
}
if(s.size()-1-site2!=site1){
return 0;
}
for(int i=site2+1;i<s.size();i++){
if(s[i]!='A'){
return 0;
}
}
return 1;
}
int main(){
int n;
cin >> n;
for(int i=0;i<n;i++){
string s;
cin >> s;
int f1 = isPTA(s);
int f2,f3;
if(f1){
f2 = isR2(s);
f3 = isR3(s);
if(f2 || f3){
cout << "YES" << endl;
}else{
cout << "NO" << endl;
}
}else{
cout << "NO" << endl;
}
}
return 0;
}
1004 成绩排名 (20 分)
#include<bits/stdc++.h>
using namespace std;
typedef struct score{
char name[15];
char classname[15];
int scorenum;
}score;
int n;
bool cmp(score s1,score s2){
if(s1.scorenum>s2.scorenum){
return true;
}else{
return false;
}
}
int main(){
cin >> n;
score s[n];
for(int i=0;i<n;i++){
cin >> s[i].name >> s[i].classname >> s[i].scorenum;
}
sort(s,s+n,cmp);
cout << s[0].name << " " << s[0].classname<<endl;
cout << s[n-1].name << " " << s[n-1].classname << endl;
return 0;
}
1005 继续(3n+1)猜想 (25 分)
#include<bits/stdc++.h>
using namespace std;
int K;
int a[105];
int b[10005];
int main(){
cin >> K;
for(int i=0;i<K;i++){
cin >> a[i];
}
for(int i=0;i<K;i++){
int num = a[i];
while(num!=1){
if(num % 2 == 1){
num = num*3 +1;
num = num /2 ;
}else{
num = num / 2;
}
if(b[num]==1){
break;
}else{
b[num] = 1;
}
}
}
sort(a,a+K);
bool flag = false;
for(int i=K-1;i>=0;i--){
//cout << a[i] << endl;
if(b[a[i]]==0){
if(flag == true){
cout << " ";
}
cout << a[i];
flag = true;
}
}
return 0;
}
1006 换个格式输出整数 (15 分)
#include<bits/stdc++.h>
using namespace std;
int main(){
int N;
cin >> N;
int b = N /100;
int s = (N/10) % 10;
for(int i=0;i<b;i++){
cout <<"B";
}
for(int i=0;i<s;i++){
cout << "S";
}
int g = N % 10;
for(int i=1;i<=g;i++){
cout << i;
}
cout << endl;
return 0;
}
1007 素数对猜想 (20 分)
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
int a[maxn]={1,1,0};
int N;
int b[maxn];
int main(){
cin >> N;
for(int i=2;i<=N;i++){
if(!a[i]){
for(int j=2*i;j<=N;j+=i){
a[j] = 1;
}
}
}
int count = 0;
for(int i=0;i<=N;i++){
if(!a[i]){
b[count++] = i;
}
}
int result = 0;
for(int i=0;i<count-1;i++){
if(b[i+1]-b[i]==2){
result++;
}
}
cout << result << endl;
return 0;
}
1008 数组元素循环右移问题 (20 分)
#include<bits/stdc++.h>
using namespace std;
int N,M;
int main(){
cin >> N >> M;
M = M % N;
int a[N];
for(int i=0;i<N;i++){
cin >> a[i];
}
for(int i=0;i<N;i++){
if(i!=N-1){
cout << a[(N-M+i)%N] <<" ";
}else{
cout << a[(N-M+i)%N] << endl;
}
}
return 0;
}
1009 说反话 (20 分)
#include<bits/stdc++.h>
using namespace std;
string s[100];
int main(){
int j = 0;
while((cin >> s[j])){
j++;
}
for(int i=j-1;i>=0;i--){
if(i!=0){
cout << s[i] << " ";
}else{
cout << s[i] <<endl;
}
}
return 0;
}
1010 一元多项式求导 (25 分)
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
int j = 0;
while((cin >> a && cin >> b)){
if(j == 0 && b!=0){
cout << a*b << " " << b-1;
}else if(j==0 && b==0){
cout << "0 0" << endl;
break;
}else if(j!=0 && b==0){
break;
}else if (j!=0 && b!=0){
cout << " " << a*b << " " << b-1;
}
j++;
}
return 0;
}