PAT(Basic Level)Practice(中文)
计算机程序设计能力考试(Programming Ability Test,简称 PAT ) 旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力, 科学的评价计算机程序设计人才, 为企业选拔人才提供参考标准。
奋力奔跑
这个作者很懒,什么都没留下…
展开
-
组合数
组合数关于n! 的一个问题组合数的计算方法1:通过定义式直接计算方法2:通过递推公式计算方法三:通过定义式的变形来计算关于n! 的一个问题求 n1中有多少个质因子p.n!中有(n/p+n/p2 +n/p3 +…)//计算n!中有多少个质因子pint cal (int n,int p){ int ans=0; while(n){ ans+=n/p; n/=p; } return ans;}如果想要计算n!的末尾有多少个零:由于0的个数等于n!中因子10的个数,而这又等于n原创 2021-05-16 17:39:25 · 178 阅读 · 0 评论 -
作业比赛编号 : 100000593 - 《算法笔记》5.6小节——数学问题->大整数运算 问题 B: N的阶乘
作业比赛编号 : 100000593 - 《算法笔记》5.6小节——数学问题->大整数运算 问题 B: N的阶乘int 型数与大整数的成绩,注意要将大整数初始化为1,长度也为1,即 while(scanf("%d",&b)!=EOF){ bign a; a.num[0]=1; a.len=1; for(int i=b;i>0;i--) { a=multi(a,i);原创 2021-05-08 19:53:26 · 135 阅读 · 0 评论 -
作业比赛编号 : 100000593 - 《算法笔记》5.6小节——数学问题->大整数运算 问题 A: a+b
作业比赛编号 : 100000593 - 《算法笔记》5.6小节——数学问题->大整数运算 问题 A: a+b题目描述:代码#include<cstdio>#include<cstring>typedef struct bign{ int num[1001];//起初一直报错,因为用的为int num[1000]; int len; bign(){ memset(num,0,sizeof(num));原创 2021-05-08 19:30:45 · 138 阅读 · 0 评论 -
大整数运算
大整数运算大整数的存储初始化转换(将字符串转换为整数数组)大整数大小的比较大整数的四则运算大整数的加法运算大整数的减法运算大整数的乘法运算(大整数与int型数据的乘法)大整数除法运算打印函数代码的实现大整数的存储大整数又称为高精度整数,其含义就是基本数据类型无法存储其精度的整数大整数的高位存储在数组的高位,低位存储在数组的低位(需要进行从字符串到整型数组的转换)例如:2345 存储为d[0]=5,d[1]=4,…但是,当用字符串读取数字时,得到的为高位存储在数组的低位用结构体来定义大数,并用原创 2021-05-06 15:27:37 · 92 阅读 · 0 评论 -
作业比赛编号 : 100000592 - 《算法笔记》5.5小节——数学问题->质因子分解 问题 E: 完数与盈数
作业比赛编号 : 100000592 - 《算法笔记》5.5小节——数学问题->质因子分解 问题 E: 完数与盈数注意输出格式代码#include<cstdio>#include<cmath>int judge(int n){ int sum=1; int k=sqrt(n); for(int i=2;i<=k;i++) { if(n%i==0) sum=sum+i+n/i; }原创 2021-05-05 17:55:22 · 132 阅读 · 0 评论 -
作业比赛编号 : 100000592 - 《算法笔记》5.5小节——数学问题->质因子分解 问题 D: 约数的个数
作业比赛编号 : 100000592 - 《算法笔记》5.5小节——数学问题->质因子分解 问题 D: 约数的个数(题目来源codeup,侵删)思路int yueShu(int n){ int k=sqrt(n); //因子分布在算术平方根的两侧,特殊情况为,正好开方尽,此时增加一个因子,所以为特殊情况讨论 int sum=0; for(int i=1;i<=k;i++) { if(n%i==0) sum+=原创 2021-05-05 17:18:51 · 125 阅读 · 0 评论 -
作业比赛编号 : 100000592 - 《算法笔记》5.5小节——数学问题->质因子分解 问题 A: 完数
作业比赛编号 : 100000592 - 《算法笔记》5.5小节——数学问题->质因子分解 问题 A: 完数#include<cstdio>#include<cmath>bool wanShu(int n){ int sum=1; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) sum=sum+i+n/i; } if(sum==n) return t原创 2021-05-04 21:04:20 · 122 阅读 · 0 评论 -
作业比赛编号 : 100000591 - 《算法笔记》5.4小节——数学问题->素数问题 C: Goldbach‘s Conjecture
作业比赛编号 : 100000591 - 《算法笔记》5.4小节——数学问题->素数问题 C: Goldbach’s Conjecture题意为:任何不小于4的偶数都可以找到至少一组两个素数的和4=2+2;10=5+5=3+7代码#include<cstdio>#include<cmath>bool primer(int n){ int k=sqrt(n); for(int i=2;i<=k;i++) if(n%i==原创 2021-05-04 20:07:56 · 134 阅读 · 0 评论 -
作业比赛编号 : 100000590 - 《算法笔记》5.3小节——数学问题->分数的四则运算 问题 A: 分数矩阵
作业比赛编号 : 100000590 - 《算法笔记》5.3小节——数学问题->分数的四则运算 问题 A: 分数矩阵献给理解能力和我一样堪忧的你(不差者忽略):理解能力堪忧的我最初竟没理解题意,最终经过悟,才最终懂得意思,发现矩阵的数关于对角线对称...原创 2021-05-04 17:48:49 · 112 阅读 · 0 评论 -
作业比赛编号 : 100000589 - 《算法笔记》5.2小节——数学问题->最大公约数与最小公倍数 问题 A: Least Common Multiple
作业比赛编号 : 100000589 - 《算法笔记》5.2小节——数学问题->最大公约数与最小公倍数 问题 A: Least Common Multiple(题目来源Codeup侵删)代码#include<cstdio>//最大公因数 int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}int main(){ int m,n; int i,j; int原创 2021-05-02 18:58:41 · 125 阅读 · 0 评论 -
1040 有几个PAT 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位P第 4 位(A)第 6 位(T)第二个 PAT 是第 3 位(P)第 4 位(A)现给定字符
1040 有几个PAT (25 分)字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位§,第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位§,第 4 位(A),第 6 位(T)。现给定字符串,问一共可以形成多少个 PAT?(题目来源PAT,侵删)输入格式:输入只有一行,包含一个字符串,长度不超过105 ,只包含 P、A、T 三种字母。输出格式:在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结原创 2021-04-18 10:28:12 · 600 阅读 · 0 评论 -
作业比赛编号 : 100000587 - 《算法笔记》4.7小节——算法初步->其他高效技巧与算法 问题 A: 求第k大数
作业比赛编号 : 100000587 - 《算法笔记》4.7小节——算法初步->其他高效技巧与算法 问题 A: 求第k大数答案输出错误解惑:1. 令人不解处:关于第k大的数:例如序列{1,2,3,4,5,6}中第3大的数是4。2. 输出时为:注意参数由此推知题目中所说的第k大为从最大的数开始数,然后依次递减得到第k大的数,例如{1 2 3 4 5 6}中的第1大的数为6,第2大的数为5,第3大的数为4…printf("%d\n",randSelect(a,0,n-1,n-m+1)) ;原创 2021-04-17 21:33:14 · 100 阅读 · 0 评论 -
作业比赛编号 : 100000586 - 《算法笔记》4.6小节——算法初步->two pointers 问题 C: 快速排序 qsort [2*]
作业比赛编号 : 100000586 - 《算法笔记》4.6小节——算法初步->two pointers 问题 C: 快速排序 qsort [2*]代码#include<stdio.h>const int maxn=5005;int partition(int a[],int left,int right){ int temp=a[left]; while(left<right) { while(left<right&原创 2021-04-17 20:33:36 · 81 阅读 · 0 评论 -
作业比赛编号 : 100000586 - 《算法笔记》4.6小节——算法初步->two pointers B基础排序III:归并排序
作业比赛编号 : 100000586 - 《算法笔记》4.6小节——算法初步->two pointers B基础排序III:归并排序#include<stdio.h>void merge(int a[],int l1,int r1,int l2,int r2){ int i=l1; int j=l2; int b[r2-l1+1]; int index=0; while(i<=r1&&j<=r2){原创 2021-04-17 20:17:55 · 101 阅读 · 0 评论 -
快速排序
快速排序思路快速排序分的代码分为两部分:1. 一部分为Partition(int a[],int left,int right) 将区间内的数进行划分,即将大于temp的数放在右侧,小于的放在左侧。仅进行一次划分;int Partition(int a[],int left,int right){ int temp=a[left]; while(left<right){ while(left<right&&a[right]>temp) right--;原创 2021-04-17 15:49:44 · 212 阅读 · 0 评论 -
归并排序(合并排序)
归并排序(合并排序)示意图运用递归将数组一直划分,递归至为两个元素一组终止 ,然后执行合并#include<stdio.h>//将数组a[r1....l1],a[l2....r2],合并; void merge(int a[],int l1,int r1,int l2,int r2){ int i=l1; int j=l2; int k=0; int b[r2-l1+1]; while(i<=r1&&j<=r2){ if(a[i]&l原创 2021-04-17 15:21:50 · 235 阅读 · 0 评论 -
求出序列中第一个大于等于x的元素的位置L以及第一个大于x的元素的位置R,这样x元素在序列中的存在区间就是左闭右开[L,R)
求出序列中第一个大于等于x的元素的位置L以及第一个大于x的元素的位置R,这样x元素在序列中的存在区间就是左闭右开[L,R)代码#include<cstdio>int lower_bound(int A[],int left,int right,int x) //左边界 { int mid; while(left<right) { //跳出循环的条件为left==right,当left==right时意味着找到了唯一的位置 mid=(left+right)/2;原创 2021-04-10 18:06:36 · 425 阅读 · 0 评论 -
木棒切割问题,给出N根木棒,长度已知,现在希望通过分割他们来得到至少K段长度相等的木棒(长度必须为整数),问这些长度相等的木棒最长能有多长
木棒切割问题,给出N根木棒,长度已知,现在希望通过分割他们来得到至少K段长度相等的木棒(长度必须为整数),问这些长度相等的木棒最长能有多长思路:运用二分法,求木棒的最大长度,为求第一个满足某条件的问题,由此联想到求右区间,为最大边界,然后减1即为最大值#include<cstdio>int a[101];//思路:运用二分法int countK(int N,int l){ int k=0; for(int i=0;i<N;i++) k+=a[i]/l; return原创 2021-04-10 18:03:57 · 1043 阅读 · 0 评论 -
装水问题,有一侧面看去是半圆的储水装置,该圆的半径为R,要求往水中装入高度为h的水,使水的面积s1与半圆的面积s2的比例为r ,求h (二分法的应用拓展)
装水问题,有一侧面看去是半圆的储水装置,该圆的半径为R,要求往水中装入高度为h的水,使水的面积s1与半圆的面积s2的比例为r ,求h (二分法的应用拓展)//装水问题,有一侧面为半圆的储水装置,该圆的半径为R,要求往水中装入高度为h的水,使水的面积s1与半圆的面积s2的比例为r ,求h #include<cstdio>#include<cmath>const double eps=1e-5;const double PI=acos(-1.0);double f(doubl原创 2021-04-10 17:19:13 · 223 阅读 · 0 评论 -
1017 A除以B本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
1017 A除以B (20 分)本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。输入格式:输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:在一行中依次输出 Q 和 R,中间以 1 空格分隔。输入样例 :123456789050987654321 7输出样例 :17636684150141093474 3注:r为余数,q为商代码#include<iostre原创 2021-03-24 20:31:59 · 462 阅读 · 0 评论 -
Codeup作业比赛编号 : 100000576 - 《算法笔记》3.2小节——入门模拟->查找元素(题号E)
Codeup作业比赛编号 : 100000576 - 《算法笔记》3.2小节——入门模拟->查找元素(题号E)#include<stdio.h>#define N 20struct Student{ char name[20]; char gender[20]; int age;}stu[N];int main(){ int n; int num; int sum; scanf("%d",&sum); wh原创 2021-03-11 23:18:42 · 117 阅读 · 0 评论 -
作业比赛编号 : 100000576 - 《算法笔记》3.2小节——入门模拟->查找元素D
作业比赛编号 : 100000576 - 《算法笔记》3.2小节——入门模拟->查找元素D错误分析: 总是不习惯使用,导致出错while(scanf("%d",&n)!=EOF){ ... ...}代码#include<stdio.h>int main(){ int m,n; int i,j; while(scanf("%d",&n)!=EOF) { int a[n]; for(i=0;i<n;i+原创 2021-03-11 18:24:29 · 138 阅读 · 0 评论 -
作业比赛编号 : 100000576 - 《算法笔记》3.2小节——入门模拟->查找元素 统计同成绩学生人数
作业比赛编号 : 100000576 - 《算法笔记》3.2小节——入门模拟->查找元素codeup1932 Problem A 统计同成绩学生人数while(scanf("%d",&n)!=EOF){if(n==0) break; //本来没有这一步总是报错for(i=0;i<n;i++)#include<stdio.h>int main(){ int n; int s,i,k; int a[1000]; while原创 2021-03-10 21:39:44 · 117 阅读 · 0 评论 -
PAT1020 月饼 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价以及市场的最大需求量请你计算可以获得的最大收益是多少销售时允许取出一部分
1020 月饼 (25 分)月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 =原创 2021-02-09 14:48:16 · 2561 阅读 · 0 评论 -
PAT1023 组个最小数给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小例如:给定两个0两个1三个5一个8得到的数字就是10015558
1023 组个最小数 (20 分)给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。现给定数字,请编写程序输出能够组成的最小的数。(题目来源PAT,侵删)输入格式:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个原创 2021-02-09 10:16:24 · 8483 阅读 · 4 评论 -
标题给定区间 [−2^31, 2^31^ ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。题目来源:PTA乙级(1011)
标题给定区间 [−231 , 231 ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。题目来源:PTA乙级(1011)输入格式:输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。输出格式:对每组测试用例,在一行中输出 Case #X: true如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。输入样例:41原创 2021-01-24 16:30:14 · 600 阅读 · 0 评论 -
给定一系列正整数请按要求对数字进行分类并输出以下 5 个数字:A1=能被 5 整除的数字中所有偶数的和被5除后余1的数字按给出顺序进行交错求和被5除后余2的数字的个数(最后一个测试点错误原因分析)
PAT 1012 数字分类 (20 分)给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:·A1= 能被 5 整除的数字中所有偶数的和;·A2= 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1 −n2+n3−n4 ⋯;·A3= 被 5 除后余 2 的数字的个数;·A4= 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;·A5= 被 5 除后余 4 的数字中最大数字。输入格式:每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000原创 2021-02-08 22:01:47 · 1152 阅读 · 1 评论 -
给定一系列正整数请按要求对数字进行分类并输出以下 5 个数字:A1=能被 5 整除的数字中所有偶数的和被5除后余1的数字按给出顺序进行交错求和被5除后余2的数字的个数被5除后余 3 的数字的平均数
1012 数字分类 (20 分)给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:·A1= 能被 5 整除的数字中所有偶数的和;·A2= 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1 −n2+n3−n4 ⋯;·A3= 被 5 除后余 2 的数字的个数;·A4= 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;·A5= 被 5 除后余 4 的数字中最大数字。输入格式:每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整原创 2021-02-08 21:49:27 · 1836 阅读 · 0 评论 -
PAT1021个位数统计给定一个k位整数N=dk−110k−1+⋯+d1101+d0请编写程序统计每种不同的个位数字出现的次数给定N=100311,则有2个0,3个1和1个3
1021 个位数统计 (15 分)给定一个 k 位整数 N=dk−110k−1+⋯+d1101 +d0(0≤di ≤9, i=0,⋯,k−1, dk−1 >0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。(题目来源PAT,侵删)输入格式:每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。输出格式:对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字原创 2021-02-06 21:08:02 · 10494 阅读 · 2 评论 -
PAT1004 成绩排名读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
1004 成绩排名 (20 分)读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。(题目来源PAT,侵删)输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩… … …第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生原创 2021-02-05 22:01:46 · 678 阅读 · 2 评论 -
PAT1009 说反话给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。1009 说反话 (20分)原创 2021-01-27 14:05:47 · 3703 阅读 · 1 评论 -
给定任一个各位数字不完全相同的 4 位正整数如果我们先把 4 个数字按非递增排序再按非递减排序然后用第 1 个数字减第 2 个数字将得到一个新数一直重复这样做我们很快会停在有数字黑洞之称的 6174
1019 数字黑洞 (20分)给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 =原创 2021-01-25 22:04:17 · 2138 阅读 · 1 评论 -
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0 A1⋯AN−1)变换为(AN−M ⋯AN−1 A0 A1⋯AN−M−1
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0 A1⋯AN−1)变换为(AN−M ⋯AN−1 A0 A1⋯AN−M−1 )(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?(题目来源PAT)输入格式:每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。输出格式:在一行中输出循环右移M位以后的整数序列,之间用空格原创 2021-01-25 13:16:16 · 20379 阅读 · 10 评论 -
令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104 ,请输出 PM到 PN 的所有素数。来源PAT
令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104 ,请输出 PM到 PN 的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输出从PM到 PN的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。输入样例:5 27输出样例:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997 101 103注意点:输出的是第m个素数到第n个素数,原创 2021-01-25 10:44:31 · 2494 阅读 · 4 评论 -
PTA乙级1007素数对猜想让我们定义dn为dn=pn+1−pn 其中pi 是第i个素数显然有d “素数对猜想”认为“存在无穷多对相邻且差为2的素数”现给定任意正整数N的满足猜想的素数对的个数
1007 素数对猜想 (20分)让我们定义dn为:dn=pn+1−pn ,其中pi 是第i个素数。显然有d1 =1,且对于n>1有dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<105 ),请计算不超过N的满足猜想的素数对的个数。(题目来源PTA乙级)输入格式:输入在一行给出正整数N。输出格式:在一行中输出不超过N的满足猜想的素数对的个数。输入样例:20输出样例:4#include<stdio.h&g原创 2021-01-25 09:39:11 · 5061 阅读 · 4 评论 -
PTA(Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)
让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12…n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。输入格式:每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。输出格式:每个测试用例的输出占一行,用规定的格式输出 n。示例:输入样例 1:234输出样例 1:BBSSS1234输入样例 2:23输出样例原创 2021-01-20 19:33:03 · 122 阅读 · 1 评论