| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 995 人关注过本帖
标题:问一个问题,求高手指点
只看楼主 加入收藏
zhouxiangron
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2010-7-9
结帖率:42.86%
收藏
已结贴  问题点数:20 回复次数:16 
问一个问题,求高手指点
用N(N<200)个1-9的数字顺序组合成一个多位数,现在要求从中删除M个数字(M<N),使得剩下的数为最大。
不知道怎么做?并且将9位数字分解也不会,请各位高手指点!
2010-08-28 09:43
Antwind
Rank: 2
等 级:论坛游民
帖 子:82
专家分:53
注 册:2010-7-11
收藏
得分:4 
#include<stdio.h>
void main()
{
  int  a[200];

  int i=0;
  int j,k;
  int N;
  int num;
  printf("Please input the number");
  printf("press 0 to end\n");
  for(j=0;j<200;j++)
                           
  {
    scanf("%d",&num);
    if(!num)   break;
    a[i++]=num;

  }
  printf("please input the N\n");
  scanf("%d",&N);
  if(i<=N)
        printf("ERROR");
   else


    {for(j=0;j<i-1;j++)
     for(k=0;k<i-j-1;k++)
        {
        if(a[k]<a[k+1])
          {int b;
           b=a[k];
           a[k]=a[k+1];
           a[k+1]=b;
           }
        }

   for(j=0;j<i-N;j++)
     printf("%d",a[j]);



    }

   getch();


 }
看哈这个;
行吗?


/*************我就是程序;程序就是我!******************/
2010-08-28 10:29
encounter
Rank: 5Rank: 5
来 自:扬州
等 级:职业侠客
威 望:2
帖 子:150
专家分:359
注 册:2010-7-24
收藏
得分:4 

考虑错了。。。
感谢楼下发现问题
改了下。。。。。。。。。。。。

N位,去M位
从左1位到左M+1位找9
没有就找8,7,6。。。。
也就是从左1位到左M+1位找一个最大的,且是第一个                这儿可用p=1;
可以用max=a[1]  
for(i=0;i<M+1;i++)
if(a[i]>max)
max=a[i];
k=i;                                                                p++  ;
然后再在第k位到第M+2位找一最大的。。。。。。。。。;
假设为a[i]
再把k=i;
然后再在第k位到第M+3位找一最大的....................

很清晰了吧
for嵌套就能完成

自己要尝试着写哦
我就不写了







[ 本帖最后由 encounter 于 2010-8-28 15:54 编辑 ]

ping   nbtstat   netstat   tracert    nat   at    ftp   telnet..................
2010-08-28 11:33
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:4 
以下是引用encounter在2010-8-28 11:33:07的发言:

就是从末位开始去1
去完1再删2等等
直到删了M个
程序不难呀。。。。。
简单写下
for(i=0;i<9;i++)
 {for(j=0;j
不对
比如有数 567215988111
从中删除5个数
按你说 应该得到 :5675988
但是其实应该是7988111

显然你的算法不正确

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-08-28 11:46
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
算法思路应该是递归思路
选取最大值
递归查找最大值右边的最大值 然后是左边的最大值

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-08-28 11:48
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:4 
典型的贪心吧

我就是真命天子,顺我者生,逆我者死!
2010-08-28 14:40
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
再看看,

[ 本帖最后由 BlueGuy 于 2010-8-28 14:54 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-08-28 14:49
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:4 
以下是引用vandychan在2010-8-28 11:48:07的发言:

算法思路应该是递归思路
选取最大值
递归查找最大值右边的最大值 然后是左边的最大值

这个思路是错的,这不是快排,御坂回答

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-28 14:56
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
比如有数 567215988111
从中删除5个数
按你说 应该得到 :5675988
但是其实应该是7988111
//按高到低位搜索递增区间, 若不存在递增区间 , 则删尾字符, 否则删递增区间的首字符

我就是真命天子,顺我者生,逆我者死!
2010-08-28 15:01
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回去一下

我就是真命天子,顺我者生,逆我者死!
2010-08-28 15:40
快速回复:问一个问题,求高手指点
数据加载中...
 
   



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

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