当前位置: 代码迷 >> C语言 >> 请问一下~~~
  详细解决方案

请问一下~~~

热度:279   发布时间:2008-04-20 11:58:43.0
[bo]以下是引用 [un]jamesbind[/un] 在 2008-4-20 11:53 的发言:[/bo]

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

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

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


----------------解决方案--------------------------------------------------------
首先声明,我的分析不是基于语法的,而是从实际执行速度方面分析的。
你的代码从表面上看只遍历了一遍,但实际上puts()中还要遍历一遍。而且还要加上函数调用的开销,所以我认为你的算法实际上比4楼的要慢。

“其实4楼的代码可以更快。。。快一倍。。。”
这是你的原话。我只是想讨论问题,没想你吵架,但是说实话,看了你的回复让我觉得心里有些不舒服。
----------------解决方案--------------------------------------------------------
已经写出来了
#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");
}
在别人的基础上修改了一下
----------------解决方案--------------------------------------------------------
看来你还没有看懂我的代码,哈哈,随便你


----------------解决方案--------------------------------------------------------
算法分析应该关心输入规模和基本操作,对于这个题输入规模就是字符串的长度; 基本操作就是比较, 所以和函数调用无关呢~
----------------解决方案--------------------------------------------------------
对于别人的代码
改不来
因为不知道原来作者的思路
改了之后也没有印象
所以就自己写咯
----------------解决方案--------------------------------------------------------
燕子那个调用指针都还米学还
我都不知道该怎么改
就只是发现了你一个低级错误
没有加上;
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]zhuwei168[/un] 在 2008-4-20 12:23 的发言:[/bo]
对于别人的代码
改不来
因为不知道原来作者的思路
改了之后也没有印象
所以就自己写咯

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

[color=white]

[[it] 本帖最后由 雨中秣燕 于 2008-4-20 12:26 编辑 [/it]]
----------------解决方案--------------------------------------------------------
回复 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;
}
这个是我给你改好的代码自己好好看看查收一下
省得以后再这么粗心,都是低级毛病。
而且你们发现了没
你们的代码都不能够实现题目的意思
----------------解决方案--------------------------------------------------------
你们的思路
都只是删除一个字符
而我要的是删除两个
所以你们的代码都有缺陷
需要改进滴
----------------解决方案--------------------------------------------------------
  相关解决方案