c语言一道很简单的题,但代码运行了多次都正确,一题交就错,求一个代码,谢谢

 我来答
纱季丶69
2020-10-26 · TA获得超过228个赞
知道答主
回答量:124
采纳率:100%
帮助的人:63.2万
展开全部

刚开始学吗?没关系,慢慢来。

首先,几点建议与纠正:

    1. 在网上求助时,尽量将代码复制过来,方便别人调试。最好再注上错误信息(如果OJ上有的话)。

    2. 的源文件拓展名是.cpp,一般认为是C++的源文件(DEV也这样认为)。

    3. 代码写好缩进(一般使用Tab),这样更加美观,也能更好地看出程序的结构,等代码写得长了你就能明白它的重要性了。用空行将不同区块分开。加一些空格……可以搜索一下代码风格,自己喜欢怎么写就怎么写;

    4. 作为for循环时用作循环结束判断的(不需要在循环之外使用的,比如你的i和j)可以在for中定义(如下)这样,i的作用域就只有这个for循环。

    5. for(int i=1; i<=n; ++i)

      其他变量也不要一股脑全部定义在一起;

    6. 数组开的大一些(一般大10个),且不使用第“0”个元素,循环时计数的变量也从1开始,i<=n,毕竟这点浪费很小,而且这样可以避免很多错误(用数组下标模拟指针的话,通常把0当作空;循环中这个计数变量是几就是第几次循环,数组下标是几就是第几个元素……)

    7. 在C++中头文件尽量使用cstdio代替stdio.h,它对stdio.h做了一些额外的工作,据说比stdio.h好一些(不容易出错)。但要使用C++库(cstdio、iostream、cmath等)时尽量在函数名前加上namespace::(C++库都用std),或者在程序开头加上using namespace std;

      如果你写C,请尽量将拓展名改为.c


错误更正:

    你的思路应该是:①输入;②枚举,如果和下一个一样就变为0;③把0去掉;④冒泡排序;⑤输出;

    1. 如果相同的数字不挨着呢(尽管样例中相同数字挨着,但题面并没有说),比如:5 9 2 5 5,只有倒数第二个5会被删掉,因此应该先排序,①④②③⑤;

    2. ②③⑤可以合并,输出时判断当前这一个和下一个是否相等,不相等则输出;

    3. 代码如下:

    #include <cstdio>

    using namespace std;

    int n,a[1000+10];

    int main()

    {

    scanf("%d",&n);

    for(int i=1; i<=n; ++i) scanf("%d",&a[i]);    //输入 

    for(int i=1; i<=n; ++i)    //冒泡排序 

    for(int j=1; j<=n-i; ++j)

    {

    if(a[j]>a[j+1])

    {

    int tmp = a[j+1];

    a[j+1] = a[j];

    a[j] = tmp;

    }

    }

    for(int i=1; i<=n; ++i)//输出

    if(a[i] != a[i+1]) printf("%d ",a[i]);    //当 i==n 时,由于我们多申请了一些空间,所以不会越界;a[i+1]没有赋值,由于a数组是全局变量,所以a[i+1]的值为0,因为输入不会有0,所以条件一定成立。 

    return 0;

    }

    其他解法(如果你是为了练习冒泡排序,请忽略):

        计数排序,记录每个数字出现的次数,这里因为要去重,可以指记录每个数字是否出现。

    参考代码:

    #include <cstdio> 

    using namespace std;

    int n;

    bool a[1000+10];//记录每个数字是否出现过 

    int main()

    {

    scanf("%d",&n);

    for(int i=1, in; i<=n; ++i)//输入并将这个数字标记为出现过 

    {

    scanf("%d",&in);

    a[in]=true;

    }

    for(int i=1; i<=1000; ++i)//如果出现过,输出 

    if(a[i])printf("%d ",i);

    return 0;

    }

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式