实验四,贪心算法(桂林理工大学)

实验四,贪心算法

一、实验目的:

理解贪心算法的思想,并能对给定的问题能设计出分治算法予以解决。

二、实验环境:

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;

}

四、心得体会:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值