互联网行业的小白,写博客的目的是为了记录自己的学习过程、对自己学习中所犯的错误做一个总结。由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!
PAT Basic Level Practice【题解】
- 1001 害死人不偿命的(3n+1)猜想
- 1002 写出这个数
- 1003 我要通过!
- 1004 成绩排名
- 1005 继续(3n+1)猜想
- 1006 换个格式输出整数
- 1007 素数对猜想
- 1008 数组元素循环右移问题
- 1009 说反话
- 1010 一元多项式求导
- 1011 A+B 和 C
- 1012 数字分类
- 1013 数素数
- 1014 福尔摩斯的约会
- 1016 部分A+B
- 1017 A除以B
- 1021 个位数统计
- 1023 组个最小数
- 1026 程序运行时间
- 1027 打印沙漏
- 1030 完美数列
- 1031 查验身份证
- 1032 挖掘机技术哪家强
- 1036 跟奥巴马一起编程
- 1037 在霍格沃茨找零钱
- 1038 统计同成绩学生
- 1039 到底买不买
- 1040 有几个PAT
- 1041 考试座位号
- 1042 字符统计
- 1043 输出PATest
- 1046 划拳
- 1047 编程团体赛
- 1048 数字加密
- 1049 数列的片段和
- 1051 复数乘法
- 1056 组合数的和
- 1057 数零壹
- 1059 C语言竞赛
- 1061 判断题
- 1063 计算谱半径
- 1064 朋友数
- 1065 单身狗
- 1067 试密码
- 1070 结绳
- 1071 小赌怡情
- 1072 开学寄语
- 1076 Wifi密码
- 1077 互评成绩计算
- 1078 字符串压缩与解压
- 1081 检查密码
- 1082 射击比赛
- 1083 是否存在相等的差
- 1086 就不告诉你
- 1087 有多少不同的值
- 1091 N-自守数
- 1092 最好吃的月饼
- 1093 字符串A+B
1001 害死人不偿命的(3n+1)猜想
题目传送门:害死人不偿命的(3n+1)猜想
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int count=0;
if(n!=1){
//注意n为1的情况!
while(1){
if(n%2==1)
n=3*n+1;
n/=2;
count++;
if(n==1) break;
}
}
cout<<count;
return 0;
}
1002 写出这个数
题目传送门:写出这个数
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
char str;
int sum=0;
while((str=getchar())!='\n')
sum += (str - '0');
if(sum==0) cout<<"ling"<<endl;//输入为0的情况另外考虑,不过对本题无影响!
int b[101],j=0;
while(sum){
//将求和后sum的每一位存在数组b中
b[j++]=sum%10;
sum/=10;
}
for(int i=j-1;i>=0;i--){
switch(b[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;
}
if(i!=0) cout<<" ";//注意最后一个没有空格
}
return 0;
}
1003 我要通过!
题目传送门:我要通过!
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main(){
int n;
cin>>n;
getchar();
string *str = new string[n];
for(int i=0;i<n;i++)
getline(cin,str[i]);
for(int i=0;i<n;i++){
int nP=0,nA=0,nT=0;
bool flag=false;
for(int j=0;j<str[i].size();j++){
if(str[i][j]=='P') nP++;
if(str[i][j]=='A') nA++;
if(str[i][j]=='T') nT++;
}
if(nP==1&&nT==1&&nA>0&&nP+nA+nT==str[i].size()) flag=true;//nA>0是为了防止出现没有A的情况
if(!flag){
cout<<"NO"<<endl;
}
else{
int len_l=0,len_m=0,len_r=0,j=0;
for(j=0;j<str[i].size();j++){
if(str[i][j]=='P') {
len_l=j;
break;
}
}
j++;
while(str[i][j]!='T'){
len_m++;
j++;
}
j++;
len_r=str[i].size()-j;
if(len_l*len_m==len_r) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}
1004 成绩排名
题目传送门:成绩排名
#include<iostream>
#include<string>
using namespace std;
struct Student{
string name;
string num;
int score;
};
int main(){
int n;
cin >> n;
Student *stu = new Student[n];
for (int i = 0; i < n; i++){
cin >> stu[i].name >> stu[i].num >> stu[i].score;
}
int max = stu[0].score, f1=0;
int min = stu[0].score, f2=0;
for (int i = 0; i < n; i++){
if (stu[i].score>max){
max = stu[i].score;
f1 = i;
}
if (stu[i].score < min){
min = stu[i].score;
f2 = i;
}
}
cout << stu[f1].name << " " << stu[f1].num << endl;
cout << stu[f2].name << " " << stu[f2].num << endl;
}
1005 继续(3n+1)猜想
题目传送门: 继续(3n+1)猜想
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int n;
cin>>n;
int *p = new int[n];
for(int i=0;i<n;i++)
cin>>p[i];
set<int>s;
for(int i=0;i<n;i++){
int temp=p[i];
while(1){
if(temp%2!=0) temp=3*temp+1;
temp/=2;
s.insert(temp);
if(temp==1) break;
}
}
set<int>::iterator it;
vector<int>ans;//用于存放结果的向量
for(int i=0;i<n;i++){
int count=0;
for(it=s.begin();it!=s.end();++it){
if(p[i]!=*it) count++;
if(count==s.size()) ans.push_back(p[i]);
}
}
sort(ans.begin(),ans.end(),cmp);//为了从大到小输出
for(int i=0;i<ans.size();i++){
if(i==ans.size()-1) cout<<ans[i];
else cout<<ans[i]<<" ";
}
return 0;
}
1006 换个格式输出整数
题目传送门:换个格式输出整数
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
int a[5], k = 0;
while (n){
a[k++] = n % 10;
n /= 10;
}
if (k == 3){
for (int i = 0; i < a[2]; i++)
cout << 'B';
k--;
}
if (k == 2){
for (int i = 0; i < a[1]; i++)
cout << 'S';
k--;
}
if (k == 1){
for (int i = 1; i <= a[0]; i++)
cout << i;
}
return 0;
}
1007 素数对猜想
题目传送门:素数对猜想
#include<iostream>
#include<math.h>
using namespace std;
bool Is_Prime(int n){
if (n < 2) return false;
for (int i = 2; i <= sqrt(n); i++){
if (n%i == 0) return false;
}
return true;
}
int main(){
int n;
cin >> n;
int ans = 0;
for (int i = 2; i <= n; i++){
if (Is_Prime(i) && Is_Prime(i-2))
ans++;
}
cout << ans;
return 0;
}
1008 数组元素循环右移问题
题目传送门: 数组元素循环右移问题
#include<iostream>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
int *a = new int[n];
for (int i = 0; i < n; i++)
cin >> a[i];
int f = m%n;//当大于数组的长度时,直接取模减少移动次数
for (int i = n - f; i < n; i++)
cout << a[i] << " ";
for (int i = 0; i < n - f; i++){
if (i != n - f - 1) cout << a[i] << " ";
else cout << a[i];//输出的最后一个没有空格
}
return 0;
}
1009 说反话
题目传送门: 说反话
#include<iostream>
#include<string>
using namespace std;
int main(){
string str;
getline(cin, str);
int k = 0,j;
char *p = new char[str.size()];
for (int i = str.size() - 1; i >= 0; i--){
if (str[i] != ' '){
p[k++] = str[i];
}
else{
for (j = k - 1; j >= 0; j--)
cout << p[j];
cout << " ";
k = 0;
}
}
for (j = k - 1; j >= 0; j--)//第一个字符串还没有输出。
cout << p[j];
//或者下面这样也行:
/*
for (int i = 0; i < str.size(); i++){//输出第一个字符串
if (str[i] == ' ') break;
else cout << str[i];
}
*/
return 0;
}
1010 一元多项式求导
题目传送门:一元多项式求导
#include<iostream>
using namespace std;
int main(){
int a,b;
bool flag = false;
while(cin>>a>>b){
if(a*b){
if(!flag)
flag=true;
else
cout<<" ";
cout<<a*b<<" "<<b-1;
}
}
if(!flag)
cout<<"0 0"<<endl;
return 0;
}
1011 A+B 和 C
题目传送门:A+B 和 C
#include<iostream>
using namespace std;
int main(){
long long T,a,b,c;
cin>>T;
for(int i=0;i<T;i++){
cin>>a>>b>>c;
if(a+b<=c) cout<<"Case #"<<i+1<<": false"<<endl;
else cout<<"Case #"<<i+1<<": true"<<endl;
}
return 0;
}
1012 数字分类
题目传送门:数字分类
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n;
cin>>n;
bool flag1=false,flag2=false,flag3=false,flag4=false,flag5=false;
int *p=new int[n];
for(int i=0;i<n;i++)
cin>>p[i];
int A1=0,A2=0,A3=0,A5=0;
float A4=0.0;
int *tempA5=new int[n],kA4=0,kA5=0,cnt=0;
for(int i=0;i<n;i++){
int select=p[i]%5+1;
switch(select){
case 1:
if(p[i]%2==0){
A1+=p[i];
flag1=true;
}
break;
case 2:
if(cnt%2!=0) p[i]=-p[i];
A2+=p[i];
cnt++;
flag2=true;
break;
case 3:
A3++;
flag3=true;
break;
case 4:
A4+=p[i];
kA4++;
flag4=true;
break;
default:
tempA5[kA5++]=p[i];
flag5=true;
break;
}
}
A4=(float)A4/kA4;//容易错,用强制类型转换
A5=tempA5[0];
for(int i=0;i<kA5;i++){
if(tempA5[i]>A5) A5=tempA5[i];
}
if(!flag1) cout<<'N'<<" ";
else cout<<A1<<" ";
if(!flag2) cout<<'N'<<" ";
else cout<<A2<<" ";
if(!flag3) cout<<'N'<<" ";
else cout<<A3<<" ";
if(!flag4) cout<<'N'<<" ";
else cout<<setiosflags(ios::fixed)<<setprecision(1)<<A4<<" ";//不加setiosflags(ios::fixed)输出格式错误
if(!flag5) cout<<'N';
else cout<<A5;
return 0;
}
1013 数素数
题目传送门: 数素数
#include<iostream>