| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3681 人关注过本帖
标题:请问一下~~~
只看楼主 加入收藏
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
[bo]以下是引用 [un]jamesbind[/un] 在 2008-4-20 11:53 的发言:[/bo]

不同意雨中飞燕14#的代码可以快一倍以上。

我觉得没有考虑puts()函数调用的开销以及puts()函数本身实现的代码。而将puts函数等同于一般语句了。

前者字符串遍历两次,我的代码只遍历一次,你说是不是两倍??
请分析清楚再下结论,你以上分析仅仅在语法级别,并没有在算法层面上考虑

" border="0" />
2008-04-20 11:58
jamesbind
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2008-3-21
收藏
得分:0 
首先声明,我的分析不是基于语法的,而是从实际执行速度方面分析的。
你的代码从表面上看只遍历了一遍,但实际上puts()中还要遍历一遍。而且还要加上函数调用的开销,所以我认为你的算法实际上比4楼的要慢。

“其实4楼的代码可以更快。。。快一倍。。。”
这是你的原话。我只是想讨论问题,没想你吵架,但是说实话,看了你的回复让我觉得心里有些不舒服。
2008-04-20 12:15
zhuwei168
Rank: 1
来 自:东软信息学院
等 级:新手上路
帖 子:180
专家分:0
注 册:2008-2-13
收藏
得分:0 
已经写出来了
#include<stdio.h>
#include<string.h>
#define N    10

int main(void)
{
    char str[N];
    int x,i,j;
    printf("请输入十个数:");
    scanf("%s",str);
    x=strlen(str);
    for(i=0;i<x;i++)
    {
        if(str[i]=='c')
        {
            if(str[i+1]=='h')
            {
                str[i]=str[i+2];
                str[i+1]=str[i+3];
                for(j=i+1;j<N;j++)
                {
                    str[j]=str[j+2];
                }
            }
        }
    }
    printf("%s",str);
        printf("\n");
}
在别人的基础上修改了一下
2008-04-20 12:16
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
看来你还没有看懂我的代码,哈哈,随便你

" border="0" />
2008-04-20 12:16
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
算法分析应该关心输入规模和基本操作,对于这个题输入规模就是字符串的长度; 基本操作就是比较, 所以和函数调用无关呢~

樱花大战,  有爱.
2008-04-20 12:19
zhuwei168
Rank: 1
来 自:东软信息学院
等 级:新手上路
帖 子:180
专家分:0
注 册:2008-2-13
收藏
得分:0 
对于别人的代码
改不来
因为不知道原来作者的思路
改了之后也没有印象
所以就自己写咯
2008-04-20 12:23
zhuwei168
Rank: 1
来 自:东软信息学院
等 级:新手上路
帖 子:180
专家分:0
注 册:2008-2-13
收藏
得分:0 
燕子那个调用指针都还米学还
我都不知道该怎么改
就只是发现了你一个低级错误
没有加上;
2008-04-20 12:24
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
[bo]以下是引用 [un]zhuwei168[/un] 在 2008-4-20 12:23 的发言:[/bo]
对于别人的代码
改不来
因为不知道原来作者的思路
改了之后也没有印象
所以就自己写咯

Very Very Good!!!!!
严重支持!

" border="0" />[color=white]

[[it] 本帖最后由 雨中飛燕 于 2008-4-20 12:26 编辑 [/it]]
2008-04-20 12:25
zhuwei168
Rank: 1
来 自:东软信息学院
等 级:新手上路
帖 子:180
专家分:0
注 册:2008-2-13
收藏
得分:0 
回复 34# 的帖子
#include<stdio.h>
#define N    11   //警告!!必须是11或者以上
int main(void)
{
    char str[N], ch;
    char* pstr = str;
    scanf("%s",str); scanf(" %c",&ch); //先后顺序!!
    for(; *pstr != '\0'; ++pstr )
    {
        if(*pstr != ch) putchar(*pstr);
        else
        {
            puts(pstr+1); break;
        }
    }
    return 0;
}
这个是我给你改好的代码自己好好看看查收一下
省得以后再这么粗心,都是低级毛病。
而且你们发现了没
你们的代码都不能够实现题目的意思
2008-04-20 12:27
zhuwei168
Rank: 1
来 自:东软信息学院
等 级:新手上路
帖 子:180
专家分:0
注 册:2008-2-13
收藏
得分:0 
你们的思路
都只是删除一个字符
而我要的是删除两个
所以你们的代码都有缺陷
需要改进滴
2008-04-20 12:30
快速回复:请问一下~~~
数据加载中...
 
   



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

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