PAT甲级训练刷题代码记录
刷题链接:https://www.patest.cn/contests/pat-a-practise
1001
#include <iostream>
#include <stdio.h> using namespace std;
int temp[];
int main()
{
int a,b,sum,index;
while(scanf("%d%d",&a,&b)!=EOF){
sum=a+b;
if(sum<){
printf("-");
sum=-sum;
}
index=; while(sum>=){
temp[index++]=sum%;
sum=sum/;
}
printf("%d",sum);
for(int i = index-;i >= ;i--){
if(temp[i]>)
printf(",%d",temp[i]);
else if(temp[i]>)
printf(",0%d",temp[i]);
else
printf(",00%d",temp[i]);
}
printf("\n");
}
return ;
}
1001
数据结构初级入门第一题:https://pta.patest.cn/pta/test/17/exam/4/question/260
#include <iostream>
#include <stdio.h> using namespace std; int main()
{
int a,h,ans,i,j,temp;char c;
while(scanf("%d %c",&a,&c)!=EOF){
for(h=;a+>=*h*h;h++);
if(a==)h=,ans=;
else ans=a-*(h-)*(h-)+;
h=(h-)*+;
//printf("h is %d and ans is %d\n",h,ans);
//下面开始输出
temp=h;
for(i=;i<h;i++){
if(i<(h+)/){
for(j=;j<i;j++)printf(" ");
for(j=;j<h-i*;j++)printf("%c",c);
printf("\n");
}else{
for(j=;j<h-i-;j++)printf(" ");
for(j=;j<*i+-h;j++)printf("%c",c);
printf("\n");
}
}
printf("%d\n",ans);
}
return ;
}
打印沙漏
第二题:思路是素数打表法,请注意做表的时候请将空间开到足够大,否则会出现越界错误。同时相对ACM来说PAT的OJ是有bug的,这也就是说明不管题目你是否会写,请得分,很简单的,至少都有分数的,加油。
#include <iostream>
#include <stdio.h>
using namespace std; #define NMAX 100000
int num[NMAX];
int main()
{
int i,j;
//思路:采用素数打表法对素数进行处理
for(i=;i < NMAX-;i++){
num[i]=;
}
for(j=;j < NMAX-;j++){
if(num[j]==)for(int k =*j;k<NMAX-;k=k+j)num[k]=;
}
//上边首先是对表进行初始化 int n,count;
while(scanf("%d",&n)!=EOF){
count=;
for(i=;i<n-;i++){
if(num[i]==&&num[i+]==)count++;
}
printf("%d\n",count);
} return ;
}
第三题:佷常见的一个题目,但是要考虑到特殊的数据集的时候,你会发现你以前不严谨的代码错误百出。还好是PAT对于结果会给你一定的提升,请考虑提高数据集的复杂性,将问题考虑全面
#include <iostream>
#include <stdio.h> using namespace std;
int num[]; void reserve(int *,int,int); int main()
{
int i,n,offset;
while(scanf("%d%d",&n,&offset)!=EOF){
if(n==)continue;
offset%=n;
for(i=;i<n;i++)scanf("%d",&num[i]);
reserve(num,,n-offset-);
reserve(num,n-offset,n-);
reserve(num,,n-); for(i=;i<n;i++)
if(i!=n-)
printf("%d ",num[i]);
else
printf("%d",num[i]);
printf("\n");
}
return ;
} void reserve(int *a,int b,int c){
int temp;
if(b>=c)return;
for(int i=b;i <= b+(c-b)/;i++){
temp=a[i];
a[i]=a[c-(i-b)];
a[c-(i-b)]=temp;
}
}
第四题:这个题真的是靠着PAT的提示给整出来的,这个编译器的是好到爆,希望考试要有这样一个效果就好了
这个题目要特别注意!!!进位问题
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
using namespace std;
#define NMAX 100
char num1[NMAX],num2[NMAX];
int demo1[],demo2[]; int main()
{
int i,j,add,count;bool flag;
while(scanf("%s",num1)!=EOF){
flag=true;
for(i=;i<;i++)demo1[i]=demo2[i]=;
for(i=;i<strlen(num1);i++)demo1[num1[i]-'']++; add=count=;
for(i=strlen(num1)-;i>=;i--){
j=num1[i]-'';
j*=;
num2[count++]=(j+add)%+'';
add=(j+add)/;
}
if(add!=)num2[count++]=add%+'';
num2[count]='\0';
for(i=;i<strlen(num2);i++)demo2[num2[i]-'']++; for(i=;i<;i++){
if(demo1[i]!=demo2[i]){
flag=false;
break;
}
}
if(flag)printf("Yes\n");
else printf("No\n"); for(i=count-;i>=;i--)printf("%c",num2[i]);
printf("\n"); }
return ;
}
第五题:终于是通关了,这个题目用的最笨的一种方法搞定的。同时也是因为自己没有理解题意,数据量太大,没法调试,卡壳了好久。参考了网上的代码后修改自己的把题目弄出来了。也是,代码这种东西满分不易,且行且珍惜。
#include <iostream>
#include <stdio.h> using namespace std;
#define MAX 60
#define COUNT 54
int place[MAX];
int temp_num[MAX];
int place_num[MAX]; int main()
{
int n,temp;
char* ans[]={
"TEMP","S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","S13",
"H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12","H13",
"C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","C13",
"D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","D13",
"J1","J2"};
while(scanf("%d",&n)!=EOF){
for(int i =;i <= COUNT;i++){
scanf("%d",&temp_num[i]);
place[i]=place_num[i]=i;
} for(int j=;j <= n;j++){ for(int t=;t<=COUNT;t++){
place_num[temp_num[t]]=place[t];
}
for(int t=;t<=COUNT;t++){
place[t]=place_num[t];
}
} //最后是输出结果 for(int i = ;i<=COUNT;i++)
if(i!=COUNT)printf("%s ",ans[place_num[i]]);
else printf("%s",ans[place_num[i]]);
printf("\n");
} return ;
}
参考代码:
参考代码
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <cmath>
#include <iostream>
using namespace std;
char f[]={'S','H','C','D','J'};
int main(){
//freopen("D:\\INPUT.txt","r",stdin);
int time;
scanf("%d",&time);
int card1[],card2[],i,j;
for(i=;i<=;i++){
card1[i]=i;
}
int order[];
for(i=;i<=;i++){
scanf("%d",&order[i]);
}
for(i=;i<=time;i++){
for(j=;j<=;j++){
card2[order[j]]=card1[j];
}
for(j=;j<=;j++){
card1[j]=card2[j];
}
}
printf("%c%d",f[(card1[]-)/],card1[]%==?:card1[]%);
for(i=;i<=;i++){
printf(" %c%d",f[(card1[i]-)/],card1[i]%==?:card1[i]%);
}
printf("\n");
return ;
}
牛客网二叉搜索树:https://www.nowcoder.com/practice/3d6dd9a58d5246f29f71683346bb8f1b?tpId=40&tqId=21455&tPage=7&rp=7&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
参考博客:http://www.cnblogs.com/rickhsg/p/3650875.html
自己的题解:
#include <stdio.h>
#include <string>
#include <string.h>
#include <stdlib.h> typedef struct Node{
int key;
struct Node *left;
struct Node *right;
}Node;
///申请一个树的根节点,并将其初始设置为空
Node * Tree=NULL,* p,* temp_p;
char tempa[],tempb[],temp_str[]; int length,i;
///先将对应的二叉树构造出来
void Creat(char* temp){
for(i=;i<strlen(temp);i++){
p=(Node *)malloc(sizeof(Node));
p->key=temp[i]-'';
p->left=p->right=NULL; if(Tree==NULL){
Tree=p;
}else{
temp_p=Tree;
while(){
if(temp_p->key==p->key)break;
else if(temp_p->key<p->key){
if(temp_p->right==NULL){
temp_p->right=p;
break;
}else
temp_p=temp_p->right;
}else
if(temp_p->key>p->key){
if(temp_p->left==NULL){
temp_p->left=p;
break;
}else
temp_p=temp_p->left;
}
}
}
}
} void pre_order(Node* Tree){
///使用前应当将长度设置为0初始化
if(Tree==NULL)return;
else{
temp_str[length++]=(char)(Tree->key+'');
//printf("+%c",temp_str[length-1]);
pre_order(Tree->left);
pre_order(Tree->right);
}
}
int main()
{
int T;
while(scanf("%d",&T)!=EOF){
if(==T)break;
scanf("%s",tempa);
Tree=NULL;
///先将对应的二叉树构造出来
Creat(tempa); ///对构造好的排序二叉树进行前序遍历进行唯一性标识
length=;
pre_order(Tree);
strcpy(tempa,temp_str); ///上边已经将二叉树构造好了,现在只要进行一个判断的工作就ok
while(T--){
scanf("%s",tempb);
Tree=NULL; ///先将对应的二叉树构造出来
Creat(tempb); ///对构造好的排序二叉树进行前序遍历进行唯一性标识
length=;
pre_order(Tree);
strcpy(tempb,temp_str); if(strcmp(tempa,tempb))printf("NO\n");
else printf("YES\n");
}
}
return ;
}
题解思路:https://www.nowcoder.com/questionTerminal/3d6dd9a58d5246f29f71683346bb8f1b
PAT甲级训练刷题代码记录的更多相关文章
- 【持续更新】【pat】pat刷题技巧记录
修改code completion快捷键位CTRL+ENTER,帮助提示函数名称 修改命令行提示符的属性,开启快速编辑模式,方便调试 添加c++11语言标准支持 开启代码调试功能 对输入的字符串进行切 ...
- PAT甲级 字符串处理题_C++题解
字符串处理题 目录 <算法笔记> 重点摘要 1001 A+B Format (20) 1005 Spell It Right (20) 1108 Finding Average (20) ...
- PAT甲级 散列题_C++题解
散列 PAT (Advanced Level) Practice 散列题 目录 <算法笔记> 重点摘要 1002 A+B for Polynomials (25) 1009 Product ...
- PAT甲级 二叉树 相关题_C++题解
二叉树 PAT (Advanced Level) Practice 二叉树 相关题 目录 <算法笔记> 重点摘要 1020 Tree Traversals (25) 1086 Tree T ...
- PAT甲级 图 相关题_C++题解
图 PAT (Advanced Level) Practice 用到图的存储方式,但没有用到图的算法的题目 目录 1122 Hamiltonian Cycle (25) 1126 Eulerian P ...
- noip2012~2015刷题小记录
2012d1t1 密码 模拟题 #include<cstdio> #include<cstdlib> #include<cstring> #include<c ...
- PAT甲级 Dijkstra 相关题_C++题解
Dijkstra PAT (Advanced Level) Practice Dijkstra 相关题 目录 <算法笔记>重点摘要 1003 Emergency (25) <算法笔记 ...
- PAT甲级 二叉查找树 相关题_C++题解
二叉查找树 PAT (Advanced Level) Practice 二叉查找树 相关题 目录 <算法笔记> 重点摘要 1099 Build A Binary Search Tree ( ...
- PAT甲级1006水题飘过
题目分析:由于不存在相同的两个时间(24:00:00和00:00:00不会同时存在),则我们假设两个全局变量存放到达的最早的时间和达到的最晚的时间,设置最早的初值为“23:59:59”,设置最晚的初值 ...
随机推荐
- 什么是umbraco
在win7上部署umbraco Umbraco是一个开放源码的CMS内容管理系统,基于asp.net建立,使用mssql进行存储数据. 使用Umbraco ,设计师能创造出有效的XHTML标记模板和开 ...
- Visual Studio 自定义项目或工程模板
如何利用 Visual Studio 自定义项目或工程模板 在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志 ...
- 【推荐】30个Matlab视频教程合集(含GUI视频教程)下载
自己收集别人网盘上存的资源,分享一下[点击文件名可得到下载地址] Matlab 7.8 基础视频教程 实例1 数据传递和多窗口编程_avi.zip 205.11 MB Matlab ...
- 传说中的WCF(1):这东西难学吗?
WCF难学吗? 是啊,这问题估计很多人都会问,也包括阿拉在内,也有此深刻而严重的凝问. 也有人说:“如何某项技术可以化繁为简,学起来轻松一点就好了.”也许,人类开生就摆脱不了一种习性——懒惰:不过,也 ...
- C#中一些易混淆概念总结
C#中一些易混淆概念 这几天一直在复习C#基础知识,过程中也发现了自己以前理解不清楚和混淆的概念.现在给大家分享出来我的笔记: 一,.NET平台的重要组成部分都是有哪些 1)FCL (所谓的.NET框 ...
- 数组自定义排序:IComparable和IComparer接口
首先先说一下IComparable和IComparer的区别,前者必须在实体类中实现,后者可以单独出现在一个排序类中,即此类只包含一个compare方法. Array类使用快速算法对数组中的元素进行排 ...
- Dynamics CRM 提示“操作无效”
今天打开一个许久没用的CRM学习环境发现出现下面的错误.顿时感觉到莫名其妙.(貌似CRM的所有错误都让人感觉到莫名其妙) 于是查看系统日志,错误如下: Current key (KeyType : C ...
- ie8下下拉菜单文字为空
<html> <head> <title></title> <script type="text/javascript"> ...
- IOS学习之路十(仿人人滑动菜单Slide-out Sidebar Menu)
最近滑动菜单比较流行,像facebook和人人等都在使用滑动菜单,今天做了一个小demo大体效果如下: 这次用了一个开源的项目ECSlidingViewController这个也是一个挺著名的托管在G ...
- revel框架教程之CSRF(跨站请求伪造)保护
revel框架教程之CSRF(跨站请求伪造)保护 CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚. 现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用.山 ...