实验四,贪心算法
一、实验目的:
理解贪心算法的思想,并能对给定的问题能设计出分治算法予以解决。
二、实验环境:
VC6.0
三、实验内容:
(写出主要的内容)
1.
#include
using namespace std;
int main()
{
int n;
int a[10005];
while(cin>>n)
{
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
int sum=0;
int tmp=0;
for(int i=1;i<=n;i++)
{
sum+=tmp;
sum+=a[i];
tmp+=a[i];
}
double ans=0;
ans=(double)sum*1.0/n;
printf("%.2lf\n",ans);
}
return 0;
}
2.
#include <stdio.h>
#include
using namespace std;
void funSort(int *a,int n)
{
int temp;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
int minWaitingTime(int *a,int n)
{
int *b = new int[n];
int i,sum=0;
for(i=0;i<n;i++)
b[i] = a[i];
for(i=1;i<n;i++)
b[i] = b[i]+b[i-1];
for(i=0;i<n;i++)
sum += b[i];
delete []b;
return sum/n;
}
int main()
{
int N,i,aveTime;
cout << "input the number of the customer: ";
cin >> N;
int *time = new int[N];
cout << "input the need service time of each customer: " << endl;
for(i=0;i<N;i++)
{
cout << “No” << i+1 << ": ";
cin >> time[i];
}
funSort(time,N);
cout << "排序后的数组为: ";
for(i=0;i<N;i++)
cout << time[i] << ' ';
cout << endl;
aveTime = minWaitingTime(time,N);
cout << "the least average waiting time is: " << aveTime << endl;
delete []time;
system("pause");
return 0;
}
#include <stdio.h>
#define MAX 100
int main(){
int n;
int a[MAX];
printf(“请输入正整数n:”);
scanf("%d",&n);
int x=2;
int index=0;
a[index++]=x;
n-=x;
while(n>a[index-1]){
a[index]=a[index-1]+1;
n-=a[index];
index++;
}
int num=index-1;
while(n){
a[num]++;
num=(num-1+index)%(index);
n–;
}
int result=1;
for(int i=0;i<index;i++){
result*=a[i];
}
printf("\n\n最大乘积为:%d\n",result);
return 0;
}
#include
#include
#include
#include<string.h>
#include
using namespace std;
int cmp(int x, int y) {
return x > y;
}
int main()
{
int n, m;
cin >> n >> m;
int i, j, max, k, min;
vectort(n);
vectormac(m);
for ( i = 0; i < n; i++) {
t[i] = 0;
}
for ( i = 0; i < m; i++) {
mac[i] = 0;
}
for (i = 0; i < n; i++)
cin >> t[i];
sort(t.begin(),t.end(), cmp);
if (n <= m)
{
printf("%d\n", t[0]);
}
else
{
for (i = 0; i < n; i++)
{
min = mac[0];
for (k = 0, j = 1; j < m; j++)
if (mac[j] < min)
{
min = mac[j];
k = j;
}
mac[k] += t[i];
}
max = mac[0];
for (i = 1; i < m; i++) {
if (mac[i] > max)
max = mac[i];
}
printf("%d\n", max);
}
return 0;
}
四、心得体会: