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外键(Foreign Key)使用详细的说明(一)

    Oracle外键(Foreign Key)使用详细的说明(一) 1.目标 演示如何Oracle使用外键数据库 2.什么是外键? 1)在Oracle数据库中,外键是用来实现參照完整性的方法之中的一个.打 ...

  2. 如何设置多个同一页的tinymce编辑

    的页面设置多个tinymce编辑器 This example shows how to setup multiple editors on the same page and with differe ...

  3. ufldl学习笔记和编程作业:Softmax Regression(softmax回报)

    ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量 ...

  4. 给Ubuntu安装KDE桌面 [转]

    自ubuntu5.10发布以来,我非常难得的让她在我的硬盘上顽强生存了近3个月,仔细想想就连当年我第一个接触的红旗Linux也不过坚持了一个月,呵呵,又写了一段废话── 所 谓的“重回Kununtu” ...

  5. 【原创】leetCodeOj --- Majority Element 解题报告(脍炙人口的找n个元素数组中最少重复n/2次的元素)

    题目地址: https://oj.leetcode.com/problems/majority-element/ 题目内容: Given an array of size n, find the ma ...

  6. quick 2.23 它们的定义c++代码lua与总结的一些细节

    它们的定义c++代码lua与总结的一些细节 参考:点击打开链接 1.自己定义 XXX.cpp .XXX.h 2.D:\quick\quick-cocos2d-x-2.2.3-rc\lib\cocos2 ...

  7. BootstrapQ 包Bootstrap tree,dialog等待

    官方网站:http://uikoo9.com/bootstrapQ why 事实上bootstrap已经非常好了,唯一的软肋就是js方面有些薄弱,对照easyui就知道了. 能够非常明显的知道boot ...

  8. Source Insight 3.X 插件支持utf8,完美解决中国乱码,连接到美丽的轮廓

    上次SI多标签插件之后,由于公司内部编码改为utf8编码,因此特意做了这个Source Insight 3.X utf8插件. 下载地址:http://pan.baidu.com/s/1mgyZous ...

  9. JDK5什么是新的线程锁技术(两)

    一个. Lock线程同步实现互斥 Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也是一个对象. 两个线程运行的代码片段要实现同步相互排斥的效果.他们必须用 ...

  10. 探索WebKit核心(一)------ 新秀开始

    为什么WebKit 现在,研究人员WebKit越来越多的人,我不能逃脱,其中还增加.WebKit也多亏了流行的浏览器和WebOS乱斗.随着Palm WebOS, Chrome OS, Firefox ...