C++贪心算法实列

1.汽车加油问题

#include<iostream>
#include <vector>
using namespace std;
using std::vector;
double greedy(vector<int>x,int n)
{
int sum=0,k=x.size();
    for(int j=0;j<k;j++)
        if(x[j]>n)
    {
        cout<<"No solution!"<<endl;
        return -1;
    }
    int s=0;
    for (int i=0;i<k;i++)
    {
        s+=x[i];
        if(s>n)
        {
            sum++;
            s=x[i];
        }
    }
     return sum;
}
int main()
{
    int i,k,n;
    int a;
    int t;
    vector<int>x;
    cout<<"请输入加油站数目:"<<endl;
    cin>>k;
    cout<<"请输入汽车加满油可行驶最远距离:"<<endl;
    cin>>n;
    cout<<"请输入加油站之间的距离:"<<endl;
    for(i=1;i<=k+1;i++)
    {
        cin>>a;
        x.push_back(a);
   }
   t=greedy(x,n);
   cout<<"最少加油次数是:"<<t<<endl;
   return 0;
}

2.删数字问题

#include<stdio.h>
#include<string.h>
#define N 10000
int main(void)
{
char a[N];
int i,j,k,n;

printf("输入要处理的数据:\n");
gets(a);
printf("输入要删除的数字个数:\n");
scanf("%d",&n);

for(i=0; i<n; i++)
{
for(j=0; j<strlen(a)-1; j++)
if(a[j]>a[j+1])
break;
for(k=j; k<strlen(a); k++)
a[k]=a[k+1];
}
printf("处理后的最小数为:%s\n",a);
return 0;
}

3.翻硬币问题

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[1003];
char b[1003];

int main()
{
    int len,sum=0;
    bool f=false;
    cin>>a>>b;
    len =strlen(a);
    for (int i=0;i<len;i++)
    {
        if (a[i]!=b[i])
        {
            f=!f;
        }
        if (f)//只需要计算两个字符不同的位置的长度即可
        {
            sum++;
        }
    }
    cout<<sum;

    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_36946026/article/details/72772210