博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电复试笔试2018-2019
阅读量:3897 次
发布时间:2019-05-23

本文共 3656 字,大约阅读时间需要 12 分钟。

我先给了18年的第三题

搞不太清楚 最短路径和最小生成树的话 可以多看看这个

瓜农王大爷去年种西瓜赚了不少钱。看到收入不错,今年他又重新开辟了n个西瓜地。

为了能给他的n个西瓜地顺利的浇上水,对于每个西瓜地他可以选择在本地打井,也可以修管道从另一个瓜地(这个瓜地可能打了井;也可能没打井,他的水也是从其他瓜地引来的)将水引过来。
当然打井和修管道的费用有差别。已知在第i个西瓜地打井需要耗费wi元,在第i、j个西瓜地之间修管道需要耗费pi,j元。
现在的问题是:王大爷要想使所有瓜地都被浇上水,至少需要花费多少钱(打井与修管道的费用和)?
由于瓜地较多,王大爷无法选择在哪些(个)瓜地打井,哪些西瓜地之间修管道。
请你编程帮王大爷做出决策,求出最小费用。

(1<=N<=300,1<=wi<=100000;pi,i=0,1<=pi,j=pj,i<=100000)

input

第1行,一个正整数n,代表西瓜地的数量。

以下n行,依次给出整数w1…wn(每块西瓜地的打井费用)。
紧接着是一个n*n的整数矩阵,矩阵的第i行第j列的数代表pi,j(两块西瓜地之间建立管道的费用)。每行的两个数之间有一个空格隔开。

#include
#include
#include
#include
using namespace std;//瓜农王大爷去年种西瓜赚了不少钱。看到收入不错,今年他又重新开辟了n个西瓜地。 //为了能给他的n个西瓜地顺利的浇上水,对于每个西瓜地他可以选择在本地打井,也可以修管道从另一个瓜地(这个瓜地可能打了井;也可能没打井,他的水也是从其他瓜地引来的)将水引过来。 //当然打井和修管道的费用有差别。已知在第i个西瓜地打井需要耗费wi元,在第i、j个西瓜地之间修管道需要耗费pi,j元。 //现在的问题是:王大爷要想使所有瓜地都被浇上水,至少需要花费多少钱(打井与修管道的费用和)? //由于瓜地较多,王大爷无法选择在哪些(个)瓜地打井,哪些西瓜地之间修管道。 //请你编程帮王大爷做出决策,求出最小费用。//这道题和我之前写过的类似,就是求最短路径,可以将打井的钱,当做是从原点到该水管的距离,这样就增加了一些距离//可以创建一个数组来存储第一位是起点,第二位是终点,值是对应距离//用到并查集 int a[100];//用来存对应点的祖宗 int zuzong(int x){
//找到某个点的祖宗 if(a[x]==x) return x; else return zuzong(a[x]); } bool check(int x,int y){
//判断两点是否同一个祖宗,也就是在不在同一个集合 return zuzong(x)==zuzong(y); } void merge_1(int x,int y){
//合并两个点到同一个祖宗,前提是他们不是同一个祖宗 a[zuzong(x)]=zuzong(y); } int dis[100][100]; int i,j; int n;//西瓜地的数量 struct Y{
int s,e,dis;//对应起点,终点,和对应距离}Gua[100];bool cmp(Y a,Y b){
return a.dis

第一题

Problem Description

有一群人去电影院看电影。但电影院有个很奇怪的规定:成人只能分到数字奇数座位号,未满18岁的儿童只能分到数字为偶数的座位号。

Input

输入共有n个人去看电影(1<=n<1000),接下来输入n个人的座位号,每个座位号用空格隔开

Output

依次输出此次看电影成人的人数以及成人在所有人中所占的比例、未成年人的人数以及未成年人在所有人中所占的比例,计算出的比例保留两位小数,每个输出用空格隔开

Sample Input

8 13 12 10 8 3 24 21 19

Sample Output

4 0.50 4 0.50

#include
#include
#include
#include
using namespace std;//第一题//Problem Description//有一群人去电影院看电影。但电影院有个很奇怪的规定:成人只能分到数字奇数座位号,未满18岁的儿童只能分到数字为偶数的座位号。//Input//输入共有n个人去看电影(1<=n<1000),接下来输入n个人的座位号,每个座位号用空格隔开//Output//依次输出此次看电影成人的人数以及成人在所有人中所占的比例、未成年人的人数以及未成年人在所有人中所占的比例,计算出的比例保留两位小数,每个输出用空格隔开//Sample Input//8 13 12 10 8 3 24 21 19//Sample Output//4 0.50 4 0.50int main(){
int i,n;//输入的人数 int sum1=0; int sum2=0; int a[100]; scanf("%d",&n); for(i=0;i

Problem Description

有一个大容器,现在向其中加入若干铅锤的木板,每个木板的顶端坐标记为(i,yi),如图

在这里插入图片描述
Input

输入共加入n个木板(1<=n<1000),接下来输入n个数字表示加入的n个木板的高度,每个高度用空格隔开

Output

输出该容器最大能装多少体积的水(容器不允许倾斜)

Sample Input

8 1 8 6 4 5 3 7 2

Sample Output

35

#include
#include
#include
#include
using namespace std;//第二题,给n模板,输入n个值代表模板的高度,求最大容积//我感觉就直接暴力,两次for循环,i从0-n-1 然后J 从i+1 到n-1 直接求最大值int main(){
int i,j,n; scanf("%d",&n); int a[100]; for(i=0;i
mmax) mmax=v; } printf("%d",mmax);}

Problem Description

有一群人,现在告诉你他们之间的朋友关系。若A与B是朋友,B是C的朋友,则A与C也是朋友。朋友关系都是双向的,即A与B是朋友,B与A也是朋友。那么A、B、C就在同一个“朋友圈”

Input

首先输入n,m表示有n个人,m对关系(1<=n<2000),接下来有m行每一行表示一对关系(输入每个数字代表一个人)

Output

输出在当前输入关系的情况下“朋友圈”的数量

Sample Input
8 7
1 2
2 4
4 1
5 7
4 3
6 2
7 8
Sample Output
2

#include
#include
#include
#include
using namespace std;//第四题有点像是连通图, 求连通图的个数。那就是用dfs或者bfs,或者是用并查集,然后用一个coun++struct Y{
int s,e;}fri[100];int a[100];int zuzong(int x){
if(x==a[x]) return x; else return zuzong(a[x]);}bool check(int x,int y){
return zuzong(x)==zuzong(y);}void merge_1(int x,int y){
a[zuzong(x)]=zuzong(y);}int main(){
int n,m;//n个人,m种关系 int i,c=1;//初始值为1,假设都连通 scanf("%d%d",&n,&m); for(i=0;i

转载地址:http://uufen.baihongyu.com/

你可能感兴趣的文章
linux后端服务程序之信号处理
查看>>
Padding也要小心
查看>>
linux异步IO编程实例分析
查看>>
小组开发环境搭建: apache+ftp+cvs+samba
查看>>
Learning C with gdb
查看>>
不可不知的json库
查看>>
JSON格式解析和libjson使用简介
查看>>
关于Json格式的理解
查看>>
c语言解析json数据
查看>>
json-c API总结
查看>>
freeBSD queue.c--定时器
查看>>
一个C实现的记日志的函数库
查看>>
C语言简单实现日志功能的的题目
查看>>
C 实现的 日志模块
查看>>
C语言实现简单的分级别写日志程序
查看>>
深入理解HTTP Session
查看>>
理解TCP中的三次握手
查看>>
linux session 浅谈
查看>>
Session
查看>>
Emacs 中文学习手册-1
查看>>