贪心法举例求解???
请在整数n=92081346718538中删除10个数字,使得余下的数字按原次序组成的新数最大。要求如下:(1)整数n和删除数字的个数“10”在源程序中完成赋值,程序直接输出运行结果;
(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最大数。
(提示:整数n可以以字符数组的方式定义、赋值和处理)
我的算法:(做了一半,但没有输出)
#include <stdio.h>
main()
{
int a[]={7,4,2,6,8,3,6,1,3,9,8,4,},i,x,y,z,min=0,n=0,b=8;
for(i=0;i<9;i++)
for(x=i+1;x<10;x++)
for(y=i+2;y<11;y++)
for(z=i+3;z<12;z++){
n=(a[i]*1000+a[x]*100+a[y]*10+a[z]);
if(min>n)
{
min=n;
printf("%d",min);
getch();
}
}
}
别人用贪心法做的,但看不懂
经典问题 贪心法
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int main()
{
int i,m=8,t=0;
char p[1005];
string s("742683613984");
for (i=0;i<s.length();i++)
{
while(t&&p[t-1]>s[i]&&m)
{
t--,m--;
cout<<p[t];
if(m)cout<<",";
}
p[t++]=s[i];
}
p[t]=0;
cout<<endl;
puts(p);
return 0;
}