C++贪心算法实列
其他
2018-06-22 05:14:32
阅读次数: 3
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