c++ 贪心算法

来源:百度知道 编辑:UC知道 时间:2024/05/24 17:04:51
#include<iostream>
using namespace std;
void afterDelete(char arr[20],int s);
int del(int k,char arr);
int main()
{
int s;
int i=0;
char arr[20];

cout<<"输入要删除数字的个数"<<endl;
cin>>s;
cout<<"输入要删的数字"<<endl;
while(arr[i]!='\n')
{
cin>>arr[i];
i++;
}
int length=sizeof arr;
afterDelete(arr,s);
return 0;
}
int del(int k,char arr[20])
{
int length=sizeof arr;
int i;
for(i=k;i<=length;i++)
arr[i]=arr[i+1];
length--;
return 0;
}

void afterDelete(char arr[20],int s)
{
int length;
length=sizeof arr;
int i=0;
int k;
if(s==1)
while(i<length && s!=0)
{
if(arr[i]>arr[i+1])
{
k=i;
del(k,arr);
i++;
s--;
break;
}

关键在于理解算法的思想,从你的代码来看你的思路并不是很清楚
既然贪心,首先就想到贪心的本质,再联系题目的要求
贪心是意思是每次的结果都在当前是最优解
作为本题来看,就是每次删除一个数之后都是比删除其它数更小的
那么什么情况会发生呢,这就是思考的要点了,这里就可以模拟几组数来进行删除实验
发现一定会是前面的数比后面的数大的时候删除它就能得到一个最优解
那么接下来代码就会很好写了

其实最重要的不是代码,而是如何从题目变成一个正确的算法,也即思考的过程

while(arr[i]!='\n')
{
cin>>arr[i];
i++;
}
改作
while(arr[i-1]!='p')
{
cin>>arr[i];
i++;
}
好像不能用回车结束