寒假在家练pat的题目,已完结
目录
-
- B 1001 害死人不偿命的(3n+1)猜想
- B 1002 写出这个数
- B 1003 我要通过
- B 1004 成绩排名
- B 1005继续(3n+1)猜想
- B 1006 换个格式输出整数
- B 1007 素数对猜想
- B 1008 数组元素循环右移问题
- B 1009 说反话
- B 1010 一元多项式求导
- B 1011 A+B和C
- B 1012 数字分类
- B 1013 数素数
- B 1014 福尔摩斯的约会
- B 1015 德才论
- B 1016 部分A+B(15)
- A 1059 Prime Factors
- B 1017 A除以B
- B 1018 锤子剪刀布
- B 1019 数字黑洞
- B 1020 月饼
- B 1021 个位数统计
- B 1022 D进制的A+B
- B 1023 组个最小数
- B 1024 科学计数法
- B 1025 翻转链表
- B 1026 程序运行时间?
- B 1027 打印沙漏
- B 1028 人口普查
- B 1029 旧键盘
- B 1030 完美数列
- B 1031 查验身份证
- B 1032 挖掘机技术哪家强
- B 1033 旧键盘打字
- B 1034 有理数四则运算
- B 1035 插入与归并
- B 1036 跟奥巴马一起编程
- B 1037 在霍格沃茨找零钱
- B 1038 统计同成绩学生
- B 1039 到底买不买
- B 1040 有几个PAT?
- B 1041 考试座位号
- B 1042 字符统计
- B 1043 输出PATest
- B 1044 火星数字
- B 1045 快速排序
- B 1046 划拳
- B 1047 编程团体赛
- B 1048 数字加密
- B 1049 数列的片段和
- B 1050 螺旋矩阵
- B 1051 负数乘法
- B 1052 卖个萌
- B 1053 住房空置率
- B 1054 求平均值
- B1056 组合数
- B 1057 数零壹
- B 1058 选择题
- B 1061 c语言竞赛
- B 1060 爱丁顿数
- B 1061 判断题
- B 1062 最简分数
- B 1063 计算谱半径
- B 1064 朋友数
- B 1065 单身狗
- B 1066 图像过滤
- B 1067 试密码
- B 1068 万花从中一点红
- B 1069 微博转发抽奖
- B 1070 结绳
- B 1071 小赌怡情
- B 1072 开学寄语
- B 1073 多选题常见计分法
- B 1074 宇宙无敌加法器
- B 1075 链表元素分类
- B 1076 Wifi密码
- B 1077 互评成绩计算
- B 1078 字符串压缩与解压
- B 1079 延迟的回文数
- B 1080 MOOC期终成绩
- B 1081 检查密码
- B 1082 射击比赛
- B 1083 是否存在相等的差
- B 1084 外观数列
- B 1085 PAT单位排行
- B 1086 就不告诉你
- B 1087 有多少不同的值
- B 1088 三人行
- B 1089 狼人杀-简单版
- B 1090 危险品装箱
- B 1091 N-自守数
- B 1092 最好吃的月饼
- B 1093 字符串A+B
- B 1095 解码PAT准考证
B 1001 害死人不偿命的(3n+1)猜想
#include<stdio.h>
int main()
{
int n,i;
int step=0;
scanf("%d",&n);
while(n!=1)
{
if(n%2==0)
{
n=n/2;
}
else
{
n=(3*n+1)/2;
}
step++;
}
printf("%d",step);
return 0;
}
B 1002 写出这个数
#include <cstdio>
#include<cstring>
int main()
{
char str[120];
int a[10];
char b[10][10]={
"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
scanf("%s",str);
int len=strlen(str);
int temp,sum=0;
for(int i=0;i<len;i++)
{
temp=str[i]-'0';
sum+=temp;
}
int k=0;
while(sum!=0)
{
a[k++]=sum%10;
sum=sum/10;
}
for(int j=k-1;j>0;j--)
{
printf("%s ",b[a[j]]);
}
printf("%s",b[a[0]]);
return 0;
}
B 1003 我要通过
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
char str[12][110]={
0};
int left;
int main()
{
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%s",&str[i]);
}
int k,t,j,p,len;
int acount=0;
for(j=0;j<n;j++)
{
len=strlen(str[j]);
acount=0;
for(i=0;i<len;i++)
{
if(str[j][i]=='P')
{
p=i;
}
else if(str[j][i]=='T')
{
t=i;
}
else if(str[j][i]=='A')
{
acount++;
}
}
if((len-t-1)-p*(t-p-2)==p&&len==acount+2&&acount!=0)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
B 1004 成绩排名
#include<cstdio>
int main()
{
struct student
{
char name[11];//字符数组最后一位需要预留给'\0',大小要比给的10大一位,所以取11位。为保险起见,以后数组值可以取大点。
char id[11];
int grade;
}st[100];
int n,maxs=0,mins=100;
int p,q;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s%s%d",st[i].name,st[i].id,&st[i].grade);
if(st[i].grade>maxs)
{
maxs=st[i].grade;
p=i;
}
if(st[i].grade<mins)
{
mins=st[i].grade;
q=i;
}
}
printf("%s %s\n",st[p].name,st[p].id);
printf("%s %s\n",st[q].name,st[q].id);
return 0;
}
B 1005继续(3n+1)猜想
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,i,t,count=0,s[10010];
int step=0;
scanf("%d",&n);
bool hash[10010]={
false};
for(i=0;i<n;i++)
{
scanf("%d",&s[i]);
t=s[i];
while(t!=1)
{
if(t%2==0)
{
t=t/2;
}
else
{
t=(3*t+1)/2;
}
hash[t]=true;
}
}
sort(s,s+n,cmp);
for(i=0;i<n;i++)
{
if(hash[s[i]]==false)
count++;
}
for(i=0;i<n;i++)
{
if(hash[s[i]]==false)
{
printf("%d",s[i]);
count--;//这里要求最后一个不要有空格输出,所以要有一个count计数,且count--的位置不能放if判断后
if(count>0)
printf(" ");
}
}
return 0;
}
B 1006 换个格式输出整数
#include <cstdio>
int main()
{
int i,n;
scanf("%d",&n);
for(i=0;i<n/100;i++)
{
printf("B");
}
for(i=0;i<n%100/10;i++)
{
printf("S");
}
for(i=1;i<=n%10;i++)
{
printf("%d",i);
}
}
B 1007 素数对猜想
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<cmath>
using namespace std;
bool isprime(int n)
{
if(n<=1)
return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int n,count=0;
scanf("%d",&n);
for(int i=3;i+2<=n;i+=2)
{
if(isprime(i)==true&&isprime(i+2)==true)
{
count++;
}
}
printf("%d",count);
return 0;
}
B 1008 数组元素循环右移问题
#include<cstdio>
int main()
{
int n,m;
int a[100];
scanf("%d%d",&n,&m);//这一步千万别忘,因为m不一定小于n
m=m%n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int j=n-m;j<n;j++)
{
printf("%d ",a[j]);
}
for(int j=0;j<n-m-1;j++)
{
printf("%d ",a[j]);
}
printf("%d",a[n-m-1]);
return 0;
}
B 1009 说反话
注意这题代码要用c,c++会编译错误,因为gets函数只能用c,c++可能就要用string容器了
#include <stdio.h>
#include<string.h>
int main()
{
char str[90];
gets(str);//这里一开始用scanf("%s",str)怎么都不对,不能这么用,不然只能接受第一个单词
int len=strlen(str);
char a[90][100];
int k=0,j=0;
for(int i=0;i<len;i++)
{
if(str[i]!=' ')
{
a[j][k++]=str[i];
}
else
{
a[j][k]='\0';
j++;
k=0;
}
}
for(int t=j;t>0;t--)
{
printf("%s ",a[t]);
}
printf("%s",a[0]);
return 0;
}
B 1010 一元多项式求导
#include<cstdio>
int main()
{
int a[20]={
0};
int count=0;
int temp,k;
while(~scanf("%d %d",&temp,&k))
{
a[k]=temp;
if(temp==0||k==0)
continue;
if(count==0)
printf("%d %d",a[k]*k,k-1);
else
printf(" %d %d",a[k]*k,k-1);
count++;
}
if(count==0)
printf("0 0");
return 0;
}
B 1011 A+B和C
#include<stdio.h>
int main()
{
int n;
long long a,b,c;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&a,&b,&c);
if(a+b>c)
printf("Case #%d: true\n",i);
else
printf("Case #%d: false\n",i);
}
return 0;
}
B 1012 数字分类
#include<cstdio>
using namespace std;
int main()
{
int n,temp,p;
int a,count=0;
int A[5]={
0};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a);
switch(a%5)
{
case 0:
if(a%2==0)
A[0]=A[0]+a;
break;
case 1:
if(count%2==0)//这里同样需要一个count记录个数,不能直接用i来判断正负
A[1]=A[1]+a;
else
A[1]=A[1]-a;
count++;
break;
case 2:
A[2]++;
break;
case 3:
A[3]=A[3]+a;
p++;
break;
case 4:
if(a>A[4])
A[4]=a;
break;
}
}
if(A[0]==0)
printf("N ");
else
printf("%d ",A[0]);
if(A[1]==0&&count==0)
printf("N ");
else
printf("%d ",A[1]);
if(A[2]==0)
printf("N ");
else
printf("%d ",A[2]);
if(A[3]==0)
printf("N ");
else
printf("%.1f ",(double)A[3]/p);
if(A[4]==0)
printf("N");
else
printf("%d",A[4]);
}
B 1013 数素数
#include <cstring>
#include<cstdio>
#include<algorithm>
#include <iostream>
using namespace std;
const int maxn=1000001;
int prime[maxn],num=0;
bool p[maxn]={
0};
void Find_Prime(int n){
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[num++]=i;
if(num>=n) break;
for(int j=i+i;j<maxn;j+=i){
p[j]=true;
}
}
}
}
int main()
{
int m,n,count=0;
scanf("%d%d",&m,&n);
Find_Prime(n);
for(int i=m;i<=n;i++){
printf("%d",prime[i-1]);
count++;
if(count%10!=0&&i<n)
printf(" ");
else printf("\n");
}
return 0;
}
B 1014 福尔摩斯的约会
#include <stdio.h>
#include<string.h>
int main()
{
char str1[60],str2[60],str3[60],str4[60];
scanf("%s",str1);
scanf("%s",str2);
scanf("%s",str3);
scanf("%s",str4);
int len1=strlen(str1);
int len2=strlen(str2);
int len3=strlen(str3);
int len4=strlen(str4);
if(len1>len2)
len1=len2;
int i;
char day[7][5]={
"MON","TUE","WED","THU","FRI","SAT","SUN"};
for(i=0;i<len1;i++)
{
if(str1[i]==str2[i]&&str1[i]>='A'&&str1[i]<='G')
{
printf("%s ",day[str1[i]-'A']);
break;
}
}
for(i++;i<len1;i++)
{
if(str1[i]==str2[i]&&str1[i]>='A'&&str1[i]<='N')
{
printf("%02d:",str1[i]-'A'+10);
break;
}
else if(str1[i]==str2[i]&&str1[i]>='0'&&str1[i]<='9')
{
printf("%02d:",str1[i]-'0');
break;
}
}
if(len3>len4)
len3=len4;
int j;
for(j=0;j<len3;j++)
{
if(str3[j]==str4[j])
{
if((str3[j]>='A'&&str4[j]<='Z')||(str3[j]>='a'&&str3[j]<='z'))
{
printf("%02d",j);
break;
}
}
}
return 0;
}
B 1015 德才论
#include <stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct student
{
char id[10];
int de,cai,sum;
int flag;
}stu[100010];
bool cmp(student a,student b)
{
if(a.flag!=b.flag)
return a.flag<b.flag;
else if(a.sum!=b.sum)
return a.sum>b.sum;
else if(a.de!=b.de)
return a.de>b.de;
else
return strcmp(a.id,b.id)<0;
}
int main()
{
int n,l,h,i;
scanf("%d %d %d",&n,&l,&h);
int pass=n;
for(i=0;i<n;i++)
{
scanf("%s",stu[i].id);
scanf("%d%d",&stu[i].de,&stu[i].cai);
stu[i].sum=stu[i].de+stu[i].cai;
if(stu[i].de<l||stu[i].cai<l)
{
stu[i].flag=5;
pass--;
}
else if(stu[i].de>=h&&stu[i].cai>=h)
{
stu[i].flag=1;
}
else if(stu[i].de>=h&&stu[i].cai<h)
{
stu[i].flag=2;
}
else if(stu[i].de>=stu[i].cai)
{
stu[i].flag=3;
}
else
{
stu[i].flag=4;
}
}
sort(stu,stu+n,cmp);
printf("%d\n",pass);
for(i=0;i<pass;i++)
{
printf("%s %d %d\n",stu[i].id,stu[i].de,stu[i].cai);
}
return 0;
}
B 1016 部分A+B(15)
#include<cstdio>
int main()
{
long long a,b;
int m,n;
int i=0,j=0;
scanf("%lld%d%lld%d",&a,&m,&b,&n);
while(a!=0)
{
if(a%10==m)
i=i*10+m;
a=a/10;
}
while(b!=0)
{
if(b%10==n)
j=j*10+n;
b=b/10;
}
printf("%d",i+j);
return 0;
}
A 1059 Prime Factors
这道题和数素数那题类似,都要得出素数表。可是输入这个数却测试结果失败的,求会的小伙伴,评论留言救下
#include <cstring>
#include<cstdio>
#include<algorithm>
#include<math.h>
#include <iostream>
using namespace std;
const int maxn=1000010;
int prime[maxn],num=0;
bool p[maxn]={
0};
void Find_Prime(){
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[num++]=i;
for(int j=i+i;j<maxn;j+=i){
p[j]=true;
}
}
}
}
struct factor{
int x;
int cnt;
}fac[10];
int main()
{
Find_Prime();
int n,count=0;
scanf("%d",&n);
if(n==1) printf("1=1");
else{
printf("%d=",n);
int sqr=(int)sqrt(1.0*n);
for(int i=0;i<num&&prime[i]<=sqr;i++){
if(n%prime[i]==0){
fac[count].x=prime[i];
fac[count].cnt=0;
while(n%prime[i]==0){
fac[count].cnt++;
n/=prime[i];
}
count++;
}
if(n==1) break;
}
if(n!=1){
fac[count].x=n;
fac[count].cnt=1;
}
for(int i=0;i<count;i++){
if(i>0) printf("*");
printf("%d",fac[i].x);
if(fac[i].cnt>1){
printf("^%d",fac[i].cnt);
}
}
}
return 0;
}
B 1017 A除以B
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<cmath>
using namespace std;
struct bign
{
int d[1010];
int len;
bign()
{
memset(d,0,sizeof(d));
len=0;
}
};
bign change(char str[])
{
bign a;
a.len=strlen(str);
for(int i=0;i<a.len;i++)
{
a.d[i]=str[a.len-i-1]-'0';
}
return a;
}
bign divide(bign a,int b,int& r)
{
bign c;
c.len=a.len;
for(int i=a.len-1;i>=0;i--)
{
r=r*10+a.d[i];
if(r<b)
c.d[i]=0;
else
{
c.d[i]=r/b;
r=r%b;
}
}
while(c.len-1>=1&&c.d[c.len-1]==0)
{
c.len--;
}
return c;
}
void print(bign a)
{
for(int i=a.len-1;i>=0;i--)
printf("%d",a.d[i]);
}
int main()
{
char str1[1010],str2[1010];
int b,r=0;
scanf("%s%d",str1,&b);
bign a=change(str1);
print(divide(a,b,r));
printf(" %d",r);
return 0;
}
B 1018 锤子剪刀布
#include<cstdio>
int change(char c)
{
if(c=='B')
return 0;
if(c=='C')
return 1;
if(c=='J')
return 2;
}
void tochange(int m)
{
if(m==0)
printf("B");
if(m==1)
printf("C");
if(m==2)
printf("J");
}
int main()
{
int n,q,p;
int v1=0,f1=0,p1=0,v2=0,f2=0,p2=0;
char a,b;
int maxa=0,maxb=0,m1=0,m2=0;
int A[3]={
0};
int B[3]={
0};
scanf("%d",&n);
for(int i=0;i<n;i++)
{
getchar();//吸收回车符,否则输入数据后会闪退
scanf("%c %c",&a,&b);
p=change(a);
q=change(b);
if((p+1)%3==q)
{
v1++;
f2++;
A[p]++;
}
if((q+1)%3==p)
{
v2++;
f1++;
B[q]++;
}
if(p==q)
{
p1++;
p2++;
}
}
printf("%d %d %d\n",v1,p1,f1);
printf("%d %d %d\n",v2,p2,f2);
for(int j=0;j<3;j++)
{
if(A[j]>maxa)
{
m1=j;
maxa=A[j];
}
if(B[j]>maxb)
{
m2=j;
maxb=B[j];
}
}
tochange(m1);
printf(" ");
tochange(m2);
}
B 1019 数字黑洞
这题需要注意:算式中数字和运算符号之间都有空格
不然,容易报格式错误哦!
#include <cstring>
#include<cstdio>
#include<algorithm>
#include <iostream>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
void to_array(int n,int num[]){
for(int i=0;i<4;i++){
num[i]=n%10;
n/=10;
}
}
int to_number(int num[]){
int sum=0;
for(int i=0;i<4;i++){
sum=sum*10+num[i];
}
return sum;
}
int main()
{
int n,MIN,MAX;
scanf("%d",&n);
int num[5];
while(1){
to_array(n,num);
sort(num,num+4);
MIN=to_number(num);
sort(num,num+4,cmp);
MAX=to_number(num);
n=MAX-MIN;
printf("%04d - %04d = %04d\n",MAX,MIN,n);
if(n==0||n==6174)
break;
}
return 0;
}
B 1020 月饼
这一篇代码在codebloks下运行没有问题,可是pat官网提交就说结果错误,希望有热心小伙伴指出错误之处。
#include<stdio.h>
#include<algorithm>
using namespace std;
struct mooncake{
double store;
double sell;
double price;
}cake[1010];
bool cmp(mooncake a,mooncake b){
return a.price>b.price;
}
int main(