| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1431 人关注过本帖, 1 人收藏
标题:思路有了 就是不懂编
只看楼主 加入收藏
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
7楼算法也很好!看来是高手啊。
2009-08-07 01:58
谁是王者
Rank: 2
等 级:论坛游民
帖 子:211
专家分:92
注 册:2009-3-3
收藏
得分:0 
只是以前做过这题。。。。我还有自己的问题没解决。。。。初学C语言。。
2009-08-07 02:01
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:20 
以下是引用CrystalFan在2009-8-7 01:52的发言:完整代码:#include #include #define MAX_LENGTH 240  void main() {     char s[MAX_LENGTH+1],res[MAX_LENGTH+1];    /*res保存运行结果*/     char *pOut=res;        ...
输入878734    5看看你的结果.....
2009-08-07 08:55
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
同时处理了最高位为0的情况....

#include <stdio.h>
#include <string.h>
#define MAX 241

int main()
{
char str[MAX],Min;
int i,j,s,m,t,k,sLen;
while(scanf("%s%d",str,&s))
{
  sLen=strlen(str);                              
  for(t=-1,i=s;i<sLen;++i) //下面是真正的算法。  
     {
      m=i;
      if(m==s) for(;str[m]=='0';--m);
      if(m==0) {printf("%c",str[0]);t=0;continue;}
      for(Min=str[m],j=m-1,k=-1;j>t;--j)
         if(str[j]<=Min&&(!(i==s&&str[j]=='0')))
           Min=str[j],k=j;
      if(k!=-1) t=k;
        else t=i;
      printf("%c",Min);
     }
  printf("\n");
  getchar();
}
return 0;
}

[ 本帖最后由 godbless 于 2009-8-7 10:01 编辑 ]
2009-08-07 09:39
yyjz
Rank: 1
等 级:新手上路
帖 子:26
专家分:9
注 册:2009-7-27
收藏
得分:0 
都是高手啊 向高手们致敬!
2009-08-07 10:53
CrystalFan
Rank: 8Rank: 8
来 自:江苏南京
等 级:蝙蝠侠
帖 子:187
专家分:802
注 册:2009-7-30
收藏
得分:0 
回复 13楼 godbless

已经改好了,每次删除后将下一个跳过了,太粗心了....
就是:如8734,删了8以后,我直接比较了34(跳过了73),所以认为所有逆序都删除了,直接从后面删了4和3,剩下7。
谢谢!
程序代码:
#include<stdio.h> 
#include<string.h> 
#define MAX_LENGTH 240 
 
void main() 
{ 
    char s[MAX_LENGTH+1],res[MAX_LENGTH+1];    /*res保存运行结果*/ 
    char *pOut=res;                            /*pOut用于输出,因为最后要过滤高位的0*/ 
    int count,i=0,j=0;  
    scanf("%s%d",s,&count); 
    if((unsigned)count>strlen(s))  
    { 
        printf("You can\'t delete %d numbers from this string which contains only %d numbers!\n",count,strlen(s)); 
        return; 
    } 
    else if((unsigned)count==strlen(s)) 
    { 
        printf("0\n"); 
        return; 
    } 
    while(count) 
    { 
        while(s[i]<=s[i+1])                    /*如果是升序,将s直接拷贝到res,直到遇到降序*/ 
            res[j++]=s[i++]; 
        i++;                                /*遇到降序则跳过一个字符*/ 
        count--;                            /*表示成功删除一个*/ 
        res[j]=s[i++]; 
        while(res[j]<res[j-1]&&count)       /*删掉一个书之后,往回找比下一个数大的*/ 
        { 
            res[j-1]=res[j];                /*从res中删掉新产生的降序数字*/ 
            j--; 
            count--; 
        } 
        i--;                        /*i要重新指向已拷贝的有效字符的下一个位置,要将前一个字符重新判断*/ 
         
    } 
    while((unsigned)i<strlen(s))/*若删降序时,已经删满所需数量,把s余下的部分拷贝到res中*/ 
        res[j++]=s[i++]; 
    while(count) 
    { 
        j--; 
        count--; 
    }                            /*如果还没删够,则从末尾开始删去字符*/ 
    res[j]='\0'; 
    while(*pOut=='0') 
        pOut++;                    /*过滤高位的0*/ 
    if(strlen(pOut)==0)            /*删完之后只剩0的情况*/ 
        printf("0\n"); 
    else 
        printf("%s\n",pOut); 
}

2009-08-07 16:39
godbless
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:216
专家分:950
注 册:2009-7-24
收藏
得分:0 
.....

[ 本帖最后由 godbless 于 2009-8-8 07:33 编辑 ]
2009-08-08 07:32
ft1223ccc
Rank: 2
等 级:论坛游民
帖 子:15
专家分:30
注 册:2009-7-2
收藏
得分:0 
厉害
感谢两位~~

我是新手我怕谁~~~~
要想成高手唯有多编程!!
2009-08-08 12:41
zhangs140
Rank: 2
等 级:论坛游民
帖 子:63
专家分:59
注 册:2009-7-26
收藏
得分:0 
太牛啦
2009-08-08 14:20
libingchen_2
Rank: 2
等 级:论坛游民
帖 子:22
专家分:62
注 册:2009-8-7
收藏
得分:0 
不知道我理解对不对 只要把输入的数N各个位进行排序 截掉最后S位不就行了
2009-08-08 17:22
快速回复:思路有了 就是不懂编
数据加载中...
 
   



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

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