6122、
題目內容:
1、问题描述:一辆汽车加满油后可行驶nkm。旅途中有若干加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
2、算法设计:对于给定的n和k个加油站位置,计算最少加油次数。
3、数据输入:
第1行是n和k,n表示汽车加满油后可行驶nkm;k表示旅途中有k个加油站
第2行是k+1个整数:表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。
4、数据输出:最少加油次数和具体在哪几个加油站加油。
5、输入实例:
7 6
1 2 3 4 5 1 6
6、输出实例
3
输入输出说明:
3、数据输入: 第1行是n和k,n表示汽车加满油后可行驶nkm;k表示旅途中有k个加油站 第2行是k+1个整数:表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。 4、数据输出:最少加油次数和具体在哪几个加油站加油。 5、输入实例: 7 6 1 2 3 4 5 1 6 6、输出实例 3
#include<iostream> using namespace std; int main(){ int n,k,sum=0,count=0; cin>>n>>k; int a[k+1]; for(int i=0;i<=k;i++){ cin>>a[i]; } for(int i=0;i<=k;i++){ sum+=a[i]; if(sum==n){ count++; sum=0; } else if(sum>n){ count++; sum=a[i]; } } cout<<count; }
6121、
題目內容:
(1)问题描述:
给定x 轴上n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。
(2)编程任务:
给定n 个闭区间,编程计算去掉的最少闭区间数。
(3)数据输入:
第一行是正整数n,表示闭区间数。接下来的n行中,每行有2 个整数,分别表示闭区间的2个端点。
(4)结果输出:
计算出的去掉的最少闭区间数。
(5)输入示例
3
10 20
10 15
20 15
(6)输出文件示例
2
输入输出说明:
(3)数据输入: 第一行是正整数n,表示闭区间数。接下来的n行中,每行有2 个整数,分别表示闭区间的2个端点。 (4)结果输出: 计算出的去掉的最少闭区间数。 (5)输入示例 3 10 20 10 15 20 15 (6)输出文件示例 2
#include<iostream> #include<algorithm> using namespace std; const int N=105; struct section{ int start,end; }p[N]; bool cmp(section a,section b){ return a.end<b.end;//升序排列 } int main(){ int n; cin>>n; int count=1,key;//不论怎么说肯定会剩下一个区间的 for(int i=0;i<n;i++){ cin>>p[i].start>>p[i].end; } for(int i=0;i<n;i++){ if(p[i].start>p[i].end){ key=p[i].start; p[i].start=p[i].end; p[i].end=key; } } sort(p,p+n,cmp); section r=p[0]; for(int i=1;i<n;i++){ if(r.end<p[i].start){ count++; r=p[i]; } } cout<<count;//感觉题目出错了 }
6120、
題目內容:
1、问题描述:
设有n 个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1<=i <= n 。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n 个顾客等待服务时间的总和除以n。这里的等待时间包括服务的执行时间,即知道服务完毕都是等待时间。
2、编程任务:
对于给定的n个顾客需要的服务时间,编程计算最优服务次序。
3、数据输入:
第一行是正整数n,表示有n 个顾客。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。
4、结果输出:
计算出的最小平均等待时间,保留2位小数。
5、输入示例
3
1 2 3
输出示例
3.33
输入输出说明:
3、数据输入: 第一行是正整数n,表示有n 个顾客。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。 4、结果输出: 计算出的最小平均等待时间,保留2位小数。 5、输入示例 3 1 2 3 输出示例 3.33
#include<iostream> #include<algorithm> #include<iomanip> using namespace std; int main(){ int n; cin>>n; int customer[n]; for(int i=0;i<n;i++){ cin>>customer[i]; } //只需要要让最小的先就可以了 sort(customer,customer+n); double sum=customer[0]; for(int i=1;i<n;i++){ for(int j=i;j>=0;j--){ sum+=customer[j]; } } printf("%.2f",sum/n); }