11

题目地址:http://pat.zju.edu.cn/contests/pat-a-practise

1069:

由下降序和上升序两个四位数不断相减,然后得到新数据,始终会到达一个数字终止。

递归能够写,简单。

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int p[4]; void dfs(int a,int b)
{
int del=a-b;
printf("%04d - %04d = %04d\n",a,b,del);
if(del==6174||del==0) return;
int i=0;
while(i<4)
{
p[i]=del%10;
del/=10;
i++;
}
sort(p,p+4);
int m1=p[3]*1000+p[2]*100+p[1]*10+p[0];
int m2=p[0]*1000+p[1]*100+p[2]*10+p[3];
dfs(m1,m2);
} int main()
{
int n;
while(cin>>n)
{
int i=0;
while(i<4)
{
p[i]=n%10;
n/=10;
i++;
}
sort(p,p+4);
int m1=p[3]*1000+p[2]*100+p[1]*10+p[0];
int m2=p[0]*1000+p[1]*100+p[2]*10+p[3];
dfs(m1,m2);
}
return 0;
}

1070:

依照比值排序。遍历就可以。

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps=1e-12; struct node
{
double num;
double price;
}nod[1005]; int cmp(node p1,node p2)
{
if(p1.price/p1.num>=p2.price/p2.num) return 1;
return 0;
} int main()
{
int n,i;
double total;
while(cin>>n>>total)
{
for(i=0;i<n;i++) cin>>nod[i].num;
for(i=0;i<n;i++) cin>>nod[i].price;
sort(nod,nod+n,cmp); double res=0;
for(i=0;i<n;i++)
{
if(total>nod[i].num)
{
res+=nod[i].price;
total-=nod[i].num;
}
else
{
res+=nod[i].price*(total/nod[i].num);
break;
}
}
printf("%.2f\n",res);
}
return 0;
} /*
3 200
180 150 100
7.5 7.2 4.5
*/

1071:

就是让你在一段文字中找出现最多次数的单词,模拟就可以。

AC代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<map>
#include<cstring>
#include<string>
#define maxn 1050000
using namespace std; char str[maxn]; char ans[maxn];
char tmp[maxn];
int ans1; map <string,int> mq; int judge(char p1)
{
if(p1>='0'&&p1<='9') return 1;
if(p1>='a'&&p1<='z') return 1;
if(p1>='A'&&p1<='Z') return 1;
return 0;
} int main()
{
int len,i,p;
while(gets(str))
{
strcpy(ans,""); //³õʼ»¯
ans1=0;
mq.clear(); len=strlen(str);
p=0;
for(i=0; i<len; i++)
{
if(judge(str[i]))
{
if(str[i]>='A'&&str[i]<='Z')
str[i]=str[i]+('a'-'A');
tmp[p++]=str[i];
}
else if(!judge(str[i])&&p>0)
{
tmp[p]='\0';
mq[tmp]++;
if(mq[tmp]>ans1||(mq[tmp]==ans1&&strcmp(tmp,ans)<=0))
{
strcpy(ans,tmp);
ans1=mq[tmp];
}
p=0;
}
} if(p>0)
{
tmp[p]='\0';
mq[tmp]++;
if(mq[tmp]>ans1||(mq[tmp]==ans1&&strcmp(tmp,ans)<=0))
{
strcpy(ans,tmp);
ans1=mq[tmp];
}
} cout<<ans<<" "<<ans1<<endl;
}
return 0;
} /*
Can1: "Can a can can a can? It can!"
*/

1072:

给你居民个数n,加油站个数m,k条路径,加油站到居民距离不能超过的最大值d。

然后接下来给了k条路径。

题目让我们求在全部的加油站中找符合不超过d的加油站。

假设加油站不唯一,按顺序优先考虑以下三个条件:

1.居民最短距离最大的加油站。

2.到全部居民距离之和最小的。

3.编号最小的。

这个题目坑了非常久,没能AC,有两个case过不了,仅仅有22分。。。。

好累。。。

代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn = 1e9; int n,m,k,d;
//居民个数,候选加油站,多少条路,距离限制
int mp[1505][1505]; //存地图
int dis[1505]; //最短路
int visi[1505]; struct node
{
int index; //编号
int sum; //总距离
int mi; //最短的距离
}; int calnumber()
{
char tmp[105];
cin>>tmp;
int ans=0,i;
int len=strlen(tmp);
if(tmp[0]=='G')
{
for(i=1;i<len;i++)
ans=ans*10+(tmp[i]-'0');
return ans;
}
else
{
for(i=0;i<len;i++)
ans=ans*10+(tmp[i]-'0');
return ans+m;
}
} void input() //输入函数
{
int i,j;
for(i=0;i<1500;i++)
{
for(j=0;j<1500;j++)
{
if(i==j) mp[i][j]=0;
else mp[i][j]=maxn;
}
} for(i=0;i<k;i++)
{
int p1=calnumber();
int p2=calnumber();
int weight;
cin>>weight;
mp[p1][p2]=mp[p2][p1]=weight;
}
} void dijkstra(int p)
{
int i,j;
for(i=0;i<=1500;i++)
{
dis[i]=maxn;
visi[i]=0;
}
dis[p]=0; //起始点 for(i=1;i<=n+m;i++)
{
int cur,mi=maxn;
for(j=1;j<=n+m;j++) //从当前结点中找一个距离最小的。拿出来标记
{
if(!visi[j]&&dis[j]<mi)
{
mi=dis[j];
cur=j;
}
} visi[cur]=1;
for(j=1;j<=n+m;j++)
{
if(dis[j]>dis[cur]+mp[cur][j])
dis[j]=dis[cur]+mp[cur][j];
}
}
} int main()
{
int i,j;
int flag;
while(cin>>n>>m>>k>>d)
{
flag=0; //flag=1表示已经有满足要求的station了
input(); node ans;
for(i=1;i<=m;i++)
{
dijkstra(i);
int tot=0,mi=maxn,ma=0;
for(j=m+1;j<=m+n;j++) //仅仅计算house的距离
{
if(mi>dis[j])
mi=dis[j];
if(ma<dis[j])
ma=dis[j];
tot+=dis[j];
} if(ma>k) continue; //超出服务范围 if(flag==0)
{
ans.index=i;
ans.sum=tot;
ans.mi=mi;
flag=1;
}
else
{
int q=0; //q=1说明要更新
if(mi>ans.mi) //加油站越远越好
q=1;
else if(mi==ans.mi&&tot<ans.sum)
q=1;
else if(mi==ans.mi&&tot==ans.sum&&i<ans.index)
q=1;
if(q)
{
ans.index=i;
ans.sum=tot;
ans.mi=mi;
}
} //printf("G%d\n",ans.index);
//printf("%.1f %.1f\n",(double)ans.sum/n,(double)ans.mi);
//printf("%d\n",ans.ma);
//printf("%d\n",ans.sum);
} if(flag==0)
{
puts("No Solution");
continue;
}
printf("G%d\n",ans.index);
printf("%.1f %.1f\n",(double)ans.mi,(double)ans.sum/n);
}
return 0;
} /*
4 3 11 5
1 2 2
1 4 2
1 G1 4
1 G2 3
2 3 2
2 G2 1
3 4 2
3 G3 2
4 G1 3
G2 G1 1
G3 G2 2 2 1 2 10
1 G1 9
2 G1 20
*/

版权声明:本文博主原创文章。博客,未经同意不得转载。

浙江大学PAT考试1069~1072(2013-11-2)的更多相关文章

  1. 浙江大学PAT考试1009~1012(1010上帝是冠军。。)

    哎,pat1010即使java书面,只有java书面,还增加了两个点,,.啊,智商捉佳,主要pat有些不给明确的范围.造成遐想空间.. 还是按顺序介绍.. 题目地址:http://pat.zju.ed ...

  2. PAT乙级:1072开学寄语(20分)

    PAT乙级:1072开学寄语(20分) 题干 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面 ...

  3. PAT 乙级 1069 微博转发抽奖(20) C++版

    1069. 微博转发抽奖(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 小明PAT考了满分,高兴之余决定 ...

  4. 软件工程项目组Z.XML会议记录 2013/11/06

    软件工程项目组Z.XML会议记录 [例会时间]2013年11月06日星期二21:00-22:00 [例会形式]小组讨论 [例会地点]三号公寓楼会客厅 [例会主持]李孟 [会议记录]薛亚杰 会议整体流程 ...

  5. 软件工程项目组Z.XML会议记录 2013/11/20

    软件工程项目组Z.XML会议记录 [例会时间]2013年11月20日星期三21:00-22:00 [例会形式]小组讨论 [例会地点]学生公寓3号楼会客厅 [例会主持]李孟 [会议记录]李孟 会议整体流 ...

  6. 软件工程项目组Z.XML会议记录 2013/11/27

    软件工程项目组Z.XML会议记录 [例会时间]2013年11月27日星期三21:00-22:00 [例会形式]小组讨论 [例会地点]学生公寓3号楼会客厅 [例会主持]罗凡 [会议记录]罗凡 会议整体流 ...

  7. PAT Basic 1069

    1069 微博转发抽奖 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整 ...

  8. PAT 甲级 1069 The Black Hole of Numbers (20 分)(内含别人string处理的精简代码)

    1069 The Black Hole of Numbers (20 分)   For any 4-digit integer except the ones with all the digits ...

  9. PAT(B) 1069 微博转发抽奖(Java)

    题目链接:1069 微博转发抽奖 (20 point(s)) 题目描述 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确 ...

随机推荐

  1. Oracle SQL Lesson (9) - 操作数据(增删改)

    使用INSERT语句INSERT INTO table [(column [, column...])]VALUES (value [, value...]); INSERT INTO departm ...

  2. OpenStack Dashboard

    OpenStackDashboard 为管理员和普通用户提供了一个图形化管理界面.用户能够通过该界面訪问.分配或者自己主动化分配基于云的资源.可扩展的设计使得与第三方产品和服务融合变得非常easy,比 ...

  3. 利用ffmpeg将H264解码为RGB

    因为公司买到了一个不提供解码器的设备,我不得已还要做解码的工作.在网上找了一圈,H264解码比較方便的也就是ffmpeg一系列的函数库了,原本设备中也是用这套函数库解码,但厂家不给提供,没办法,仅仅得 ...

  4. linux下&quot;=&quot;号与&quot;==&quot;号

    <鸟哥的linux私房菜>基础学习篇P382中说,在bash中"="与"=="是同样的,都代表推断是否相等,仅仅只是因为其它语言一般写法使用&quo ...

  5. Maximal Square 我们都在寻找最高1子矩阵(leeCode)

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...

  6. HTML介绍JS

    首先,该脚本的链接插入HTML代码: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU2h1aVRpYW5OYWlMdW8=/font/5a6L5L2T/f ...

  7. 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }

    异常{ 无法将 匿名方法 转换为类型"System.Delegate",因为它不是委托类型 } 委托实际上是把方法名作为参数,但是若有好多个方法时,就要指明是哪个参数  查看如下代 ...

  8. paip.java UrlRewrite 的原理and实现 htaccess正則表達式转换

    paip.java UrlRewrite 的原理and实现 htaccess正則表達式转换 #---KEYWORD #-正則表達式 正則表達式 表示 非指定字符串开头的正则 排除指定文件夹.. 作者 ...

  9. ios 多线程开发(二)线程管理

    线程管理 iOS和OS X中每一个进程(或程序)由一个或多个线程组成.程序由一个运行main方法的线程开始,中间可以产生其他线程来执行一些指定的功能. 当程序产生一个新线程后,这个线程在程序进程空间内 ...

  10. CSS 之 光进入光

    一个.概念 css,层叠样式表(英语:Cascading Style Sheets.简写CSS).又称串样式列表.层次结构式样式表文件,一 种用来为结构化文档(如HTML文档或XML应用)加入样式(字 ...