浙大PAT考试1005~1008
来源:互联网 发布:c语言 整数奇偶排序 编辑:程序博客网 时间:2024/05/01 07:15
突然发现前面的题目不一定是4个成套出现的。
其实看下题目的分数,就知道题目的难度。
20分的肯定是不需要算法的水题,25~30分的可能是简单dp,或简单搜索。
pat的题目主要是把题目得读懂了,感觉很容易出现bug。
题目地址:点击打开链接
1005
题目大意:给你一个字符串,把他们按位加起来,然后用英文输出即可。
AC代码:
//water#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;char str[105];int ans[105];char mp[10][10]={"zero","one","two","three","four","five", "six","seven","eight","nine"};int main(){ int sum,i; while(cin>>str) { sum=0; int len=strlen(str); for(i=0;i<len;i++) sum+=str[i]-'0'; int t=0; if(sum==0) { puts("zero"); continue; } while(sum) { ans[t++]=sum%10; sum/=10; } cout<<mp[ans[t-1]]; for(i=t-2;i>=0;i--) cout<<" "<<mp[ans[i]]; cout<<endl; } return 0;}/*123450*/
1006
题目大意:给你n个人,分别给名字,进来的时间,出去的时间。找出最早进来的人和最晚出去的人。
直接排序就好了。。
AC代码:
#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<algorithm>using namespace std;struct node{ char s1[25]; char s2[25]; char s3[25];}nod[1005];int cmp1(node p1,node p2){ if(strcmp(p1.s2,p2.s2)<0) return 1; return 0;}int cmp2(node p1,node p2){ if(strcmp(p1.s3,p2.s3)>0) return 1; return 0;}int main(){ int n,i; while(cin>>n) { for(i=0;i<n;i++) cin>>nod[i].s1>>nod[i].s2>>nod[i].s3; sort(nod,nod+n,cmp1); cout<<nod[0].s1<<" "; sort(nod,nod+n,cmp2); cout<<nod[0].s1<<endl; } return 0;}/*3CS301111 15:30:28 17:00:10SC3021234 08:00:00 11:25:25CS301133 21:45:00 21:58:40*/
1007
题目大意:找一个最大字串和,还是一维的,不过wa点无数。。
1.这个需要输出的是 首尾元素,不是下标。
2.答案为负数,输出0,第一个元素和最后一个元素。
3.i,j都是最小的,如果不是最小,如有前缀0,需要往前推。
dp方程为dp[i]=max(dp[i-1],0)+a[i];
AC代码:
//一维最大连续子串和。。//注意这个题目是要输出首尾元素,而不是下标。。//这题bug真多。。#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<algorithm>#define ll long longusing namespace std;const int maxn=100005;ll a[maxn],dp[maxn];ll ma(ll m,ll n){ if(m>n) return m; return n;}int main(){ int n,i; while(cin>>n) { for(i=0;i<n;i++) cin>>a[i]; ll res=-1e9; int l,r; dp[0]=a[0]; if(dp[0]>res) { res=dp[0]; r=0; } for(i=1;i<n;i++) { dp[i]=ma(dp[i-1],0)+a[i]; if(dp[i]>res) { res=dp[i]; r=i; } } l=r; ll tmp=res-a[l]; while(tmp) { l--; tmp-=a[l]; } while(l>=1&&a[l-1]==0) l--; if(res==0) cout<<"0 0 0"<<endl; else if(res<0) cout<<"0"<<" "<<a[0]<<" "<<a[n-1]<<endl; else cout<<res<<" "<<a[l]<<" "<<a[r]<<endl; } return 0;}/*5-2 3 4 5 154 -2 1 4 -25-2 -1 -3 -4 -110-10 1 2 3 4 -5 -23 3 7 -214-1 0 0 -140 1 2 340 0 0 0100 2 3 4 -11 3 7 -5 -5 -5103 7 -11 1 2 3 4 -5 -5 -5*/
1008
题目大意:最开始在0层电梯,然后上一层需要6s,下一层需要4s,停一层需要5s,问你总共需要多长时间,直接计算即可。
20分water...
AC代码:
//water#include<iostream>#include<cstdio>using namespace std;int main(){ int n; int i,las; while(cin>>n) { int x; las=0; int res=n*5; for(i=0;i<n;i++) { cin>>x; if(las>x) res+=(las-x)*4; else res+=(x-las)*6; las=x; } cout<<res<<endl; } return 0;}//3 2 3 1
0 0
- 浙大PAT考试1005~1008
- 浙大PAT考试1001~1004
- 浙大PAT甲级-1008
- 浙大PAT甲级-1005
- 浙大PAT考试1009~1012(1010是个神题。。)
- 浙大PAT考试1013~1016(最伤的一次。。)
- 浙大PAT考试1069~1072(2013-11-2)
- 浙大PAT考试1077~1080(2014上机复试题目)
- 浙大PAT考试1073~1076(2014-3-1)
- 浙大PAT考试1061~1064(2013-8-30)
- 浙大 pat Basic Level 1008
- 浙大 pat Basic Level 1005
- 浙大PAT 1008题 1008. Elevator
- 浙大ZOJ PAT practice – 1005
- 浙大PAT basic level 解题1001-1005
- 浙大pat 1017
- 浙大pat Advance 1003
- 浙大PAT目录
- 有胃病怎么吃最好
- python操作mysql数据库(常用函数)
- android实现记住用户名和密码以及实现自动登录
- uml类图关系
- 一个用 C++ 实现的快速无锁队列
- 浙大PAT考试1005~1008
- 两表连接
- list_entry和list_for_each分析
- struct inode和struct file
- 以太网及IEEE802封装
- Spring注解大全以及案例
- RO段、RW段和ZI段 说明
- 聪明的哥在出租车巧设免费WiFi
- 普林斯顿公开课 算法3-2:求第k大的数