PTA练习
自己刷题
ABOOMMMMM
这个作者很懒,什么都没留下…
展开
-
自测-5 Shuffling Machine (20分)C++
就一个简单的映射。假设有两个数组,A(卡牌初始序),B他们的size相同,同时给定一组数C(仍然和AB的size相同),C数组中的下标表示假设为i,则代表A数组中下标为i所存的元素A[i],同时对应C数组下标所存的元素C[i],表示的是数组B的下标的位置BC[i]B_{C[i]}BC[i]。理解这个关系就好做了。#include <iostream>#include <vector>using namespace std;int main() { //构造牌的初始化序列原创 2020-05-21 15:16:02 · 164 阅读 · 0 评论 -
自测-4 Have Fun with Numbers (20分)C++
用哈希表的思想。题目给20位的整数很明显超过了2^64,一般对于很大的数据量,用string来代替int,还可以节省空间。先编写一个double string的函数,注意进位和比原来字符串多一位就好。然后对原字符串每一位,构造一个table,初始化10个0(表示0-9,table中的存的数据表示的是出现次数),然后分别对s 和doublestr(s)构造table比较就好了。#include <iostream>#include <string>#include <原创 2020-05-21 10:43:41 · 202 阅读 · 0 评论 -
自测-2 素数对猜想 (20分)C++
利用厄拉多塞筛法。这个算法也是leetcode上看到的。原理:首先构造一个N+1个元素的bool数组,并且全部置true,然后从2(2是第一个素数)开始,将2的倍数(要求该数小于sqrt(N),因式分解关于sqrt(N)对称)在table中全部置false,(2的倍数至少有2,所以不是素数),那么最后table中为true的下标就是素数。然后利用双指针思想不断更新指针就好。#include <iostream>#include <vector>#include <原创 2020-05-19 10:36:53 · 202 阅读 · 0 评论 -
自测-1 打印沙漏 (20分)C++
类似找规律。从中间层开始看,依次为1,3,5,7,…,2n-1所以从第一层加到中间层的字符个数为n^2。那么总的字符个数为2n^2 - 1,其中n为层数,从1开始。然后利用题目所给N倒推层数layer即可。layer = sqrt((N+1)/2)。然后就很简单了。#include <iostream>#include <string>#include <math.h>using namespace std;int main(){ int原创 2020-05-18 18:30:33 · 263 阅读 · 0 评论 -
7-38 数列求和-加强版 (20 分)C++
太菜了,还是看别人的思路才自己写出来。#include <iostream>using namespace std;//本质是一个进位问题//9999// 999// 99// 9int main(){ int A, N; cin >> A >> N; int* p = new int[(wint_t)(N + 2)];//为...原创 2019-12-19 16:30:39 · 411 阅读 · 0 评论 -
7-36 复数四则运算 (15分)C
强行过检测点哈哈哈哈哈但是整数还是不知道为什么过不了#include <stdio.h>//要考虑当值小于0.1或者大于-0.1时,该值为0 void pack(double a1,double b1,double a2,double b2,char c,double s_num,double v_num);void print_add(double a1,double b...原创 2019-12-18 22:05:43 · 316 阅读 · 0 评论 -
7-34 通讯录的录入与显示 (10 分)C++
老是说我类型之间不能相互比较,我已经全部改了仍然不能通过,但是自己编译结果是可行的。重复10次也可行。例子也可行。是个用户输出一个也可行。#include <iostream>#include <vector>#include <string>using namespace std;int main(){ unsigned int N; ...原创 2019-11-27 20:59:43 · 834 阅读 · 0 评论 -
7-33 有理数加法 (15 分)C++
#include <iostream>#include <string>using namespace std;/**要解决几个问题*输入的问题*求和的问题*化简的问题*/int Min(int a,int b) { return (a > b) ? b : a;}int main(){ int Min(int a, int b); /...原创 2019-11-27 16:28:40 · 1231 阅读 · 1 评论 -
7-32 说反话-加强版 (20 分)C++
分两步。第一步:对字符串进行预处理,使得每个单词之间只存在一个空格。第二部:反转两个字符串的位置。#include <iostream>#include <string>using namespace std;//多利用调试//考虑情况要全面int main(){ string sen; string phsen;//预处理后的字符串 st...原创 2019-11-27 15:42:33 · 499 阅读 · 0 评论 -
7-31 字符串循环左移 (20 分) C++
往字符串最末尾加前N个字符,然后从第N+1个字符开始输出到末尾#include <iostream>#include <string>using namespace std;int main(){ string word; unsigned int N; getline(cin, word); cin >> N; if (N == 0) {...原创 2019-11-26 20:27:17 · 410 阅读 · 0 评论 -
7-28 猴子选大王 (20 分)C++
代码思路注释部分为优化过程。#include <iostream>#include <vector>using namespace std;int main(){ unsigned int N; //cout << "请输入一个数:" << endl; cin >> N; vector<int> num...原创 2019-11-22 21:44:31 · 350 阅读 · 0 评论 -
PTA7-24念数字
#include <iostream>#include <string>#include <vector>using namespace std;int main(){ string s1; //cout << "请输入一个整数:" << endl; cin >> s1; vector<string&...原创 2019-11-05 20:49:21 · 318 阅读 · 0 评论 -
PTA7-24 约分最简分式 (15 分)
都快忘了C怎么写了。主要运用辗转相除法吧。代码没有优化,可能很复杂。#include <stdio.h>//利用辗转相除法求两个数的公因数 //m>n,利用m=km,n=kn,则m-n=(m-n)k,将大数化小 //编写辗转相除法函数接口int findfac(int a,int b);int main(){ int a,b,d; //printf("请...原创 2019-11-05 20:01:42 · 844 阅读 · 0 评论 -
PTA7-23
太菜了,改了无数次,而且方法复杂的一批。#include <iostream>#include <string>using namespace std;int main(){ string s; //cout << "请输入一个不超过9位的非负整数:" << endl; cin >> s; //分别定义两个拾百千万以及...原创 2019-11-04 22:01:33 · 197 阅读 · 0 评论