| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8585 人关注过本帖
标题:新手求助:将一个数组中的0都移至数组末尾,将非0的移至开始(保持原来的顺 ...
只看楼主 加入收藏
drppssini
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-10-6
收藏
 问题点数:0 回复次数:10 
新手求助:将一个数组中的0都移至数组末尾,将非0的移至开始(保持原来的顺序不变)。
① 根据下面主函数中的函数调用形式,分别完成所需函数定义。主函数定义如下:
void main()
{
    put(myfunc(getx()));
}
② 数组中各元素数据随机生成,并要保证数组中至少有两个元素值为0,且每次运行数据不相同。
运行如图
图片附件: 游客没有浏览图片的权限,请 登录注册



搜索更多相关主题的帖子: 元素 
2015-12-30 16:33
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
put(),getx()都是你 自己定义的嘛?
2015-12-30 17:48
drppssini
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-10-6
收藏
得分:0 
回复 2楼 wengbin
是的。都要自己定义。
2015-12-30 17:51
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
程序代码:
#include<iostream>
#include<time.h>
#include<stdlib.h>
#define Size 10
using namespace std;
int *getx();
int *func(int*);
void put(int*);
int *getx()
{
    static int a[Size];
    srand(time(0));
    unsigned int cou = 0;
    for(unsigned int i = 0; i<Size; i++)
    {
        a[i] = rand() % 10;
        if(a[i] == 0)++cou;
    };
    if(cou == 0)
    {
        int i = rand() % Size; a[i] = 0;
        int j = rand() % Size;
        while(i == j)
        {
            //rand() % Size;已经改为下面的
            j=rand() % Size;
        }
        a[j] = 0;
    }
    if(cou == 1)
    {
        int i = rand() % Size;
        while(a[i] == 0)
        {
            i = rand() % Size;
        }
        a[i] = 0;
    }
    for(unsigned int i = 0; i < Size; i++)cout << a[i] << "\t";
    cout << endl;
    return a;
}
int *func(int*p)
{
    static int b[Size];
    int cou = 0;
    for(int i = 0, j = 0; i<Size; i++, j++)
    {
        if(*(p + i) != 0)
        {
            b[j] = *(p + i);
            cou += 1;
        }
        else
        {
            j--;
        }
    }
    for(int i = cou; i<Size; i++)b[i] = 0;
    return b;
}
void put(int*p)
{
    for(unsigned int i = 0; i < Size; i++)cout << *(p + i) << "\t";
    cout << endl;
}
int main()
{
    put(func(getx()));
    system("pause");
    return 0;
}


[此贴子已经被作者于2015-12-31 10:47编辑过]

2015-12-30 20:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我写的貌似有些麻烦

程序代码:
#include<stdio.h>

int f(int * s,int idx,int len)
{
    int i=0;
    for(i=idx+1;i<len;i++)
    {
        if(*(s+i)>0) 
        {
            return i;
            break;
        }
    }
    return len+9;
}

int main (void)
{
    int s[8]={2,0,5,0,8,9,8,1};
    int i=0;
    for(;i<8;i++)
    {
        if(s[i]==0 && f(s,i,8)<8)
        {
            int t=s[f(s,i,8)];
            s[f(s,i,8)]=s[i];
            s[i]=t;
        }
    }
    for(i=0;i<8;i++) printf("%4d",s[i]);
    return 0;
}


DO IT YOURSELF !
2015-12-31 08:28
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
四楼代码:
       while(i == j)
        {
            rand() % Size; //这里有个明显的错误,计算的值没有使用,将引起死循环。
        }
二个cou判断代码其实是重复代码。

五楼的不符合题义2每次产生的数不一样的要求。
2015-12-31 10:37
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:0 
回复 6楼 newdos
计算的值应该返回给j,这的确是错误,不过代码不是重复的吧,一个是要判断只有一个0元素,只替换一个0进去,一个是没有0元素,替换两个0进去呀

[此贴子已经被作者于2015-12-31 10:49编辑过]

2015-12-31 10:45
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
以下是引用wengbin在2015-12-31 10:45:10的发言:

计算的值应该返回给j,这的确是错误,不过代码不是重复的吧,一个是要判断只有一个0元素,只替换一个0进去,一个是没有0元素,替换两个0进去呀


其实没有必要这样判断,一个for循环就搞定了。不管是没有产生0元素或是只产生了一个0元素的情况,只要是少于2个,补齐就完了,多于2个的情况直接跳过。
就象这样:t就相当于你的cou
    for(; t<2;) {
        i = rand() % N;
        if(arr[i] != 0) {
            arr[i] = 0;
            t++;
        }
    }

如果题目变成不少于x个0,你的代码要改的地方就多了。

[此贴子已经被作者于2015-12-31 10:56编辑过]

2015-12-31 10:53
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 newdos
我只看了第一行  新手求助:将一个数组中的0都移至数组末尾,将非0的移至开始(保持原来的顺序不变)。

其他行次都没有看

DO IT YOURSELF !
2015-12-31 10:59
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
回复 9楼 wp231957
呵.呵,其实没啥,俺也估计是你没有看,不过是一些学生题,活动一下脑袋罢了。
给全代码,他也学不到什么。

[此贴子已经被作者于2015-12-31 11:03编辑过]

2015-12-31 11:02
快速回复:新手求助:将一个数组中的0都移至数组末尾,将非0的移至开始(保持原来 ...
数据加载中...
 
   



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

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