恩
书上说用贪心法 贪心法是不是就是穷举罚 `
----------------解决方案--------------------------------------------------------
贪心法,以前还没接触过,刚搜索了一下,看来是个不错的算法,还在研究,而穷举可不行,是最笨的方法哦
----------------解决方案--------------------------------------------------------
恩`
我这有个C的 你要不要看看
我发给你`
#include <iostream.h>
#include <string.h>
int main()
{
char a[241];
int s;
int i,j,k;
int flag[241];
int flag2;
cin>>a;
cin>>s;
for (i=0;i<strlen(a);i++)
flag[i]=1;
for (i=0;i<s;i++)
{
flag2=1;
for (j=0;j<strlen(a)-1;j++)
{
if (flag[j]==1)
{
k=j+1;
while(flag[k]==0)
k++;
if (a[j]>a[k])
{
flag[j]=0;
flag2=0;
break;
}
}
}
if (flag2==1)//表示没有删除数据
{
j=strlen(a)-1;
//cout<<a[j]<<flag[j]<<endl;
while(flag[j]==0)
j--;
flag[j]=0;
}
}
for (i=0;i<strlen(a);i++)
if (flag[i]!=0)
cout<<a[i];
cout<<endl;
system("pause");
}
----------------解决方案--------------------------------------------------------
[分析]很容易想到用贪心,但是贪心标准是什么呢?
删S次,每次删的数要使剩下的数尽量小。例如上面的例子,第一次删7,至少比第一次删1,5,4,3,8好!
这样,删数过程是:
175438
15438
1438
138
13
实现很简单,就是从左向右找到第一个i,使n[i]>n[i+1],如果找到了,就删第i个,否则删最后一位。
这里一次选择的i是2,2,2,3,因此解向量是:(2,2,2,3)
呵呵,没问题了,找到点资料,这个算法不难啊,开始我就是没想到要遍历一下,惭愧。。。题目可以做出来了
----------------解决方案--------------------------------------------------------
//输入一个整数,再由用户输入要删除数的个数,按原来的顺序排只是把要删除的数从中抽出
import java.io.*;
class xct{
void output(String str,int n){
StringBuffer sb=new StringBuffer(str);
boolean k;
int i;
while(n!=0){
k=true;
for(i=0;i<sb.length()-1;i++){
if(sb.charAt(i)>sb.charAt(i+1)&&sb.charAt(i+1)!='0'){
sb.deleteCharAt(i);
k=false;
break;
}
}
if(k==true) sb.deleteCharAt(sb.length()-1);
n--;
}
System.out.println(sb);
}
public static void main(String [] args) throws IOException{
int n;
String numstr;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
do{
System.out.print("请输入一个数 : ");
numstr=br.readLine();
System.out.print("数字长度为 : "+ numstr.length()+"\n请输入要删除数字的位数 : ");
n=Integer.parseInt(br.readLine());
if(n<numstr.length())break;
else System.out.println("所删除位数不能大于数字长度,重新输入!");
}while(true);
xct t=new xct();
t.output(numstr,n);
}
}
这样就对了,嘿嘿,修改了一下小错误
[此贴子已经被作者于2006-5-18 23:12:07编辑过]
----------------解决方案--------------------------------------------------------
我也做出来``
算法和你一样`
----------------解决方案--------------------------------------------------------
对你提个小小的建议`
就是你编码的时候把代码排版弄好点 那样你出错后处理错误更好` 别人也容易看`
----------------解决方案--------------------------------------------------------
以下是引用shiyide在2006-5-19 12:25:00的发言:
对你提个小小的建议`
就是你编码的时候把代码排版弄好点 那样你出错后处理错误更好` 别人也容易看`
对你提个小小的建议`
就是你编码的时候把代码排版弄好点 那样你出错后处理错误更好` 别人也容易看`
汗掉,这个有点麻烦了,明明在编译器里面排版都很规矩的,进了帖子就不行了,似乎网页不认识tab做的缩进......
----------------解决方案--------------------------------------------------------
哈哈,很好的交流呢,希望我以后能和你们一样,一起交流
----------------解决方案--------------------------------------------------------
呵呵,编代码很无聊的,不和别人多交流交流早晚会疯掉地。。。。
----------------解决方案--------------------------------------------------------