| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6165 人关注过本帖, 2 人收藏
标题:再发一个上机c程序
只看楼主 加入收藏
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
饭没白吃。。。。  想到了

How are you 怎么是你?
How old are you   怎么老是你?
2008-06-05 11:51
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
比想像的复杂 。。。   一放学就继续写了2个多小时

错的多 再验证验证..

[[it] 本帖最后由 yxwsbobo 于 2008-6-5 19:49 编辑 [/it]]
程序代码:
#include "string"
#include <stdio.h>
#define TNUM 10000000
char result[TNUM];
char * DeleteNumber(char * strSource, long k)
{
    *result=*strSource;
    long Num[10]={0L,-1L,-1L,-1L,-1L,-1L,-1L,-1L,-1L,-1L};
    long length=strlen(strSource);
    Num[strSource[*Num]-'0']=0;
    if((k=length-k)<=0)
        return "0";
    for(int i=1;i!=length;++i)
    {
        if(*Num+length-i+1==k)
        {
            sprintf(result+*Num+1,"%s",strSource+i);
            result[k]=0;
            return result;
        }
        if(result[*Num]>strSource[i])
        {
            int j;
            for(j=strSource[i]+1-'0';j!=10;++j)
                if(Num[j]!=-1)
                    if(Num[j]+length-i+1>k)
                    {
                        result[*Num=Num[j]]=strSource[i];
                        for(int temp=j;temp!=10;++temp)Num[temp]=-1;
                        break;
                    }
                    else
                    {
                        *Num-=length-i-k;
                        sprintf(result+*Num,"%s",strSource+i);
                        result[k]=0;
                        return result;
                    }
            Num[strSource[i]-'0']=*Num;
            continue;
        }
        else
            if(result[*Num]<strSource[i])
                Num[strSource[i]-'0']=*Num+1;
        result[++*Num]=strSource[i];
    }
    result[k]=0;
    return result;
}


先这样吧  系数是9

[[it] 本帖最后由 yxwsbobo 于 2008-6-5 20:05 编辑 [/it]]

How are you 怎么是你?
How old are you   怎么老是你?
2008-06-05 19:43
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
楼上有提交上OJ试过么??



" border="0" />[color=white]
2008-06-05 19:49
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
  我算的是
20395 2
输出035

吃饭饭```

复杂度 O(9n)

你的是多高啊  如果还低的话我再想想。

[[it] 本帖最后由 yxwsbobo 于 2008-6-5 20:14 编辑 [/it]]

How are you 怎么是你?
How old are you   怎么老是你?
2008-06-05 20:13
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
我也帖一下……吃饭去
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str[10000001];
char MinInt(char str[],int begin,int end,int *index)
{
    int i;
    char smin=str[begin];
    *index=begin;
    for(i=begin+1;i<end;i++)
    {
        if(smin>str[i])
        {
            smin=str[i];
            *index=i;
        }
    }
    return smin;
}
char *DeleteNumber(char str[],int k)
{
    char snum,*smin;
    int i,j=1,len,kk=0;
    smin=(char *)malloc(sizeof(strlen(str)-k));
    snum=str[0];
    len=strlen(str);
    if(k>=len) return "0";
    if(k==0) return str;
    for(i=1;i<k+1;i++)
    {
        if(str[i]!='0'&&snum>str[i])
        {
            snum=str[i];
            kk=i;
        }
    }
    smin[0]=snum;
    for(i=kk+1;i<len;i++)
    {
        smin[j]=MinInt(str,kk+1,k+j+1,&kk);
        j++;
    }
    smin[j+1]='\0';
    return smin;
}
int main()
{
    int len;
    while(scanf("%s%d",str,&len)!=EOF){
        printf("%s",DeleteNumber(str,len));
    }
    return 0;
}

[[it] 本帖最后由 smltq 于 2008-6-6 16:02 编辑 [/it]]
2008-06-05 20:17
Loli
Rank: 1
来 自:飞燕算法群46520219
等 级:新手上路
帖 子:348
专家分:0
注 册:2008-5-27
收藏
得分:0 
O(n) (常系数忽略,虽然系数也要优化一下)


" border="0" />[color=white]
2008-06-05 20:27
C王之王
Rank: 1
来 自:南京
等 级:新手上路
帖 子:49
专家分:0
注 册:2008-6-5
收藏
得分:0 
谁能帮我解答。。。
这个题 是先键盘输入300个字符 要求算出每个英文字母出现多少次 逗号 感叹号 问号 句号 出现的次数
我写了这个
// Note:Your choice is C++ IDE
#include "stdio.h"

void main()
{
    int i,j,da[26]={0},xiao[26]={0},wenhao,gantanhao,douhao,juhao;
    char daxie[26],xiaoxie[26],word[5];//word为输入字符数组
    daxie[0]='A',xiaoxie[0]='a';
    for(i=0;i<26;i++)
    {
        daxie[i]=daxie[0]+i;
        xiaoxie[i]=xiaoxie[0]+i;    
    }
    for(j=0;j<5;j++)
    scanf("%c",word[j]);
    for(j=0;j<5;j++)
    {
      for(i=0;i<26;i++)
      {
          if(word[j]==daxie[i])
          da[i]++;
          else if(word[j]==xiaoxie[i])
          xiao[i]++;
      }
      if(word[j]==34)
      wenhao++;
      if(word[j]==33)
      gantanhao++;
      if(word[j]==44)
      douhao++;
      if(word[j]==63)
      juhao++;
    }
 for(i=0;i<26;i++)
 { printf("%c出现%d次 %c出现%d次",daxie[i],da[i],xiaoxie[i],xiao[i]);
  printf("问号出现%d次 感叹号出现%d次 逗号出现%d次 句号出现%d次",wenhao,gantanhao,douhao,juhao);      
 }
 
  
}



可以运行,可是输入数后运算不出来
2008-06-05 20:46
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
不明白……是每找到一个就打印一个吗?
那样可以省下很多空间
2008-06-05 20:56
界水乘风
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-06-05 21:03
yxwsbobo
Rank: 5Rank: 5
等 级:职业侠客
帖 子:345
专家分:306
注 册:2007-10-29
收藏
得分:0 
话说我已经24小时没睡了 - -

OJ上的 如果输入 0003 2  要输出什么呢 0 还是03?

给你一个n位的正整数,然后,要你从中去掉k位
要让剩下所得到的这个整数要尽可能地小
20395 2

How are you 怎么是你?
How old are you   怎么老是你?
2008-06-05 21:11
快速回复:再发一个上机c程序
数据加载中...
 
   



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

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