标题:一个关于ArrayList的问题
只看楼主
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
得分:0 
我是从一本书上看到的题目

书上说用贪心法 贪心法是不是就是穷举罚 `

学好编程,为中国的软件事业出一份力。
2006-05-18 22:20
ycxct
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-17
得分:0 
贪心法,以前还没接触过,刚搜索了一下,看来是个不错的算法,还在研究,而穷举可不行,是最笨的方法哦
2006-05-18 22:30
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
得分:0 
恩`

我这有个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");
}

学好编程,为中国的软件事业出一份力。
2006-05-18 22:33
ycxct
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-17
得分:0 
[分析]很容易想到用贪心,但是贪心标准是什么呢?
删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)

呵呵,没问题了,找到点资料,这个算法不难啊,开始我就是没想到要遍历一下,惭愧。。。题目可以做出来了
2006-05-18 22:39
ycxct
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-17
得分:0 
//输入一个整数,再由用户输入要删除数的个数,按原来的顺序排只是把要删除的数从中抽出
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编辑过]

2006-05-18 22:52
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
得分:0 
我也做出来``

算法和你一样`

学好编程,为中国的软件事业出一份力。
2006-05-19 10:39
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
得分:0 
对你提个小小的建议`

就是你编码的时候把代码排版弄好点 那样你出错后处理错误更好` 别人也容易看`

学好编程,为中国的软件事业出一份力。
2006-05-19 12:25
ycxct
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-17
得分:0 
以下是引用shiyide在2006-5-19 12:25:00的发言:
对你提个小小的建议`

就是你编码的时候把代码排版弄好点 那样你出错后处理错误更好` 别人也容易看`

汗掉,这个有点麻烦了,明明在编译器里面排版都很规矩的,进了帖子就不行了,似乎网页不认识tab做的缩进......

2006-05-19 23:10
快乐让让
Rank: 1
等 级:新手上路
帖 子:56
专家分:0
注 册:2006-3-8
得分:0 
哈哈,很好的交流呢,希望我以后能和你们一样,一起交流

孤独是一个人的狂欢~!狂欢是一群人的孤独~!(永远爱老公)
2006-05-20 16:41
ycxct
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-4-17
得分:0 
呵呵,编代码很无聊的,不和别人多交流交流早晚会疯掉地。。。。
2006-05-20 17:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-65248-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037799 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved