| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1136 人关注过本帖
标题:请大家再来思考一下这个问题
只看楼主 加入收藏
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 8楼 rjsp
请用自然语言描述一下你的算法和分析过程。
而且当 a 的中间位置含有 0 的时候你的程序会出错,不过思路还是不错的

[ 本帖最后由 voidx 于 2011-4-18 13:35 编辑 ]
2011-04-18 13:22
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
回复 11楼 voidx
还想到一种更加高效的方法:

在 a 的前 k+1 位中,取最小的一个位,删除这个最小位之前的数。最小位之后的数 进行递归。

比如 a=5412873 k=3
则在前k+1=4位(“5413”)中取最小位,即1,删除1之前的所有数(即5和4)
余下 2873,还需要删除1一个数,即用 a=2874,k=1递归
……
a = 874, k=1
……
a = 74,k=0 结束

即需要删除5 4 8
2011-04-18 13:47
『点点滴滴』
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:168
专家分:1035
注 册:2007-7-9
收藏
得分:0 
先说我的程序的思想:a1 a2 a3 a4 ..aj.. ak
1.考虑只删1位的情况,找出第一个存在逆序的数字,删除它的逆序中最大的数。如果没有这样的数字,则说明数字是按升序排序,只需要删除数列中最后一个数字。
  比如a2存在逆序,即(a1>a2),那么必须删除a1,可以使剩下的数最小(如果不删除a1,那不管后边删除哪个数字,最高位都是a1,大于最高位是a2的数)
2.删n位的情况可以归结为情况1,先在长度为k的序列中删除1个数字,然后在长度为k-1的序列中删除1个数字...

rjsp的程序思想和我这个差不多,不过他是枚举所有长度为k-1的数字,然后找到最小的数,用得到的结果枚举所有长度为k-2的数字....
2011-04-18 13:51
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
呵呵,看来大家的思路都差不多,我的思路和代码放在 1 楼吧,也跟大家的思路一样,大家帮我看看有哪些可以改进的地方,稍后再结贴送分,大家别急~
2011-04-18 13:57
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:3 
是不是OJ题?楼主贴出地址

********多贴代码,少说空话*******
2011-04-18 16:58
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    int k,n,i,j,lp;
    char a[10]="\0",rslt[10]="\0";
    scanf("%s%d",a,&k);
    n=(int)strlen(a);
    if(k==n)
    {
        printf("0\n");
        return 0;
    }
    lp=-1;
    for(j=0;j<n-k;j++)
    {
        lp++;
        rslt[j]=a[lp];
        for(i=lp;i<k+j+1;i++)
        {
            if(rslt[j] > a[i])
            {
                rslt[j]=a[i];
                lp=i;
            }
        }
    }
    printf("%s\n",rslt);
    return 0;
}

********多贴代码,少说空话*******
2011-04-18 17:53
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
这题还上不了OJ吧,是咱们论坛之前的一个问题,我觉得挺有意思的,但是当时没有人注意,所以我在把它贴出来让大家思考一下
https://bbs.bccn.net/redirect.php?goto=findpost&pid=1936155&ptid=335905
2011-04-18 23:36
快速回复:请大家再来思考一下这个问题
数据加载中...
 
   



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

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