| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2654 人关注过本帖
标题:各位看看我哪里错了,数组题
只看楼主 加入收藏
unight
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
各位看看我哪里错了,数组题
【问题描述】编写函数,从一个排好序的整形数组中删去某数。

【输入形式】

输入共两行,数字均为正整数

第一行为10个数字,以空格分割

第二行为1个要删除的数字
【输出形式】

输出共一行,分为两种形式:

1)删除成功

以空格分割的删除后的数字序列

2)删除失败

“fail!”(不含引号)
【样例输入】

1 2 3 4 5 6 7 8 9 10

10
【样例输出】

1 2 3 4 5 6 7 8 9
我的源码:
#define N 10
#include "stdio.h"
int dele(int str[],int y)
{
    int i,j,p=0;
    for (i=0;i<N;i++)
        if(str[i]==y)
    {j=i;p=1;break;}
    if(p==1)
        for(;j<N-1;j++)
    str[j]=str[j+1];
    return p;
}
void main()
{
    int i,j,t,a[N],x;
    for(i=0;i<N;i++)
        scanf("%d",&a[i]);
    for(j=i;j<N;j++)
        if(a[i]>a[j])
    {
        t=a[i];a[i]=a[j];a[j]=t;
    }
    scanf("%d",&x);
    if(dele(a,x))
        for(i=0;i<N-1;i++)
    printf("%d ",a[i]);
    else
        printf("fail!");
}
搜索更多相关主题的帖子: 正整数 include 
2017-04-21 14:58
unight
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
收藏
得分:0 
好像输入1 1 1 1 1 1 1 1 1 2时应该输出2,可我还是原样输出,其他情况都没问题
2017-04-21 15:00
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10551
专家分:42996
注 册:2014-5-20
收藏
得分:2 
简单测试了一下,好象没问题。
图片附件: 游客没有浏览图片的权限,请 登录注册

void main()
{
    int a[N]={1,2,3,4,5,6,7,8,9,10};
    dele(a, 5);
    int i;
    for (i=0; i<N-1; ++i)
        printf("%d ", a[i]);
}
2017-04-21 15:14
unight
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
收藏
得分:0 
回复 3楼 吹水佬
不是,你试着输入1 1 1 1 1 1 1 1 1 2
应该输出2
2017-04-21 15:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
是输入本身就是“排好序的整形数组”,
还是要自己排序?
2017-04-21 15:30
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用unight在2017-4-21 15:25:26的发言:

不是,你试着输入1 1 1 1 1 1 1 1 1 2
应该输出2
“输入1 1 1 1 1 1 1 1 1 2”后,还要输入一个待删除的值,所以此时是等待输入的状态,不是“应该输出2”
2017-04-21 15:37
unight
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
收藏
得分:0 
回复 6楼 rjsp
如果数组是1 1 1 1 1 1 1 1 1 2
然后要求删除1
结果应该是2吧
但我代码跑起来结果还是1 1 1 1 1 1 1 1 1 2
其他情没什么大问题了
2017-04-21 16:39
磊仔快乐
Rank: 2
等 级:论坛游民
帖 子:15
专家分:34
注 册:2017-3-27
收藏
得分:2 
试试我修改的这个
#define N 10
#include "stdio.h"
int dele(int str[],int y)
{
     int i,j,p=0;
     for (i=0;i<N;i++)
         if(str[i]==y)
     {j=i;p=1;break;}
     if(p==1)
      for(;j<N-1;j++)
     str[j]=str[j+1];
     return p;
}
int main()
{
     int i,j,t,a[N],x,k;
     printf("请输入十个数:\n");
     for(i=0;i<N;i++)
     {
        scanf("%d",&a[i]);
     }
     for(j=0;j<N-1;j++)
    for(i=0;i<N-j-1;i++)
        if(a[i]>a[i+1])
        {
            t=a[i];
            a[i]=a[i+1];
            a[i+1]=t;
        }
     for(i=0;i<N;i++)
     printf("%d ",a[i]);
     printf("\n");
     printf("请输入要删除的数:\n");
     scanf("%d",&x);
     for(i=0;i<N;i++)
     {
        if(a[i]==x)
        k=1;
     }
     if(k==1)
    {   
        dele(a,x);
        for(i=0;i<N-1;i++)
        printf("%d ",a[i]);
    }

     else
        printf("fail!\n");
     printf("\n");
     return 0;
}
2017-04-21 17:58
unight
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
收藏
得分:0 
回复 8楼 磊仔快乐
还是不行啊!
2017-04-22 11:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
程序代码:
#include <stdio.h>

#define N 10

void dele(int str[],int y,int flag[])
{
    for (int i=0;i<N;i++) if(str[i]==y) flag[i]=0;
}

void main()
{
    int i,a[N],x;
    for(i=0;i<N;i++) scanf("%d",&a[i]);
    scanf("%d",&x);
    int flag[10]={1,1,1,1,1,1,1,1,1,1};
    dele(a,x,flag);
    int j=0;
    for(i=0;i<N;i++) if(flag[i]) j++;
    if(j==N) printf("fail!"); else for(i=0;i<N;i++) if(flag[i]) printf("%d ",a[i]);
}

DO IT YOURSELF !
2017-04-22 19:22
快速回复:各位看看我哪里错了,数组题
数据加载中...
 
   



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

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