| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1268 人关注过本帖
标题:这个有人懂吗
只看楼主 加入收藏
gegemenjiuwo
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2022-9-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
这个有人懂吗
【问题描述】调整输入数组A[0..n],将其分为两部分,左边所有元素为奇数,右边所有元素为偶数
【输入形式】a0,b1,b2,a1,a2,b3,a3,a4
【输出形式】a0,a1,a2,a3,a4,b1,b2,b3
【样例输入】1,2,33,8,5
【样例输出】1,33,5,2,8
搜索更多相关主题的帖子: 输入 元素 调整 输出 形式 
2022-09-13 16:29
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:566
专家分:3690
注 册:2019-7-29
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    int i,j,val[256],temp;
    char str[256],len=0,flag;
    printf("请输入数据:");
    gets(str);

    for(i=0,flag=0;i<strlen(str); i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            if(flag==0)
            {
                val[len++]=atoi(&str[i]);
                flag=1;
            }
        }
        else
        {
            flag=0;
        }
    }

    if(len<=0)
        return 0;

    for(i=len-1;i>0;i--)
    {
        for(j=0;j<i;j++)
        {
            if(val[j]%2==0 && val[j+1]%2==1)
            {
                temp = val[j];
                val[j] = val[j+1];
                val[j+1] = temp;
            }
        }
    }
    for(i=0;i<len-1;i++)
        printf("%d,",val[i]);
    printf("%d",val[i]);

    return 0;
}
收到的鲜花

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2022-09-13 17:10
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
    int data[100],n=0;
while(1)
{
    
    int num=scanf(" %d , ",data+n);
    
    if(num==0 || num==EOF) break;
    n++;
}


    int i=0,j;
    j=n-1;
    while(1)
    {
       if(i==j) break; 
       if((data[i]&1)==0)
       
         while(1)
         {
             if(i==j) break; 
             if((data[j]&1)==0)--j;
             else
             {
                int temp=data[i];
                data[i]=data[j];
                data[j]=temp;
               --j;
               break;
             }
         }
       if(i==j) break; 
      ++i ; 
    }
    
    printf("%d", data[0]);
    for (i=1; i<n; i++)
    {
        printf(",%d", data[i]);
    }


    return 0;
}
收到的鲜花
2022-09-13 19:55
不会游泳的虾
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:27
帖 子:107
专家分:675
注 册:2021-7-1
收藏
得分:5 
供参考:
程序代码:
#include <stdio.h>
void reOrderArray(int* array, int length)
{
    int i, j, tmp;
    for (i = 0; i < length - 1; i++) {
        for (j = 0; j < length - i - 1; j++) {
            //a[j]为偶数,a[j+1]为奇数,奇数在前,偶数在后
            if (array[j] % 2 == 0 && array[j + 1] % 2 != 0)
            {
                tmp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = tmp;
            }
        }
    }
}
int main()
{
    int a[] = { 1,2,33,8,5 }, n, i;
    n = sizeof(a) / sizeof(a[0]);
    reOrderArray(a, n);
    for (i = 0; i < n; i++)
        printf(i == 0 ? "%d" : " %d", a[i]);
    return 0;
}
2022-09-14 08:21
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
其实就是C++的 std::stable_partition,因此可以借鉴一下她的算法。
然而,这个函数比较复杂,可以使用空间换时间,从而达到 O(n) 的时间复杂度;也可以不额外增加空间,但时间复杂度就差了,变为 O(n*logn)

参考:https://www.coder.work/article/1200903
参考:http://wujiantao. 中的 __inplace_stable_partition
2022-09-14 08:53
gegemenjiuwo
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2022-9-13
收藏
得分:0 
只用C语言

[此贴子已经被作者于2022-9-14 10:46编辑过]

2022-09-14 10:37
gegemenjiuwo
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2022-9-13
收藏
得分:0 
回复 2楼 纯蓝之刃
嗯。。

[此贴子已经被作者于2022-9-14 14:19编辑过]

2022-09-14 10:40
gegemenjiuwo
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2022-9-13
收藏
得分:0 
回复 3楼 jklqwe111
哥,这个错了
2022-09-14 10:46
gegemenjiuwo
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2022-9-13
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a[100];
    gets(a);
    int i = 0;
    int l = 1;
    for(i = 0; i < 100; i++){
        if(a[i] == ',') l++;
    }
    int c[l];
    i = 0;
    int j = 0;
    while(i < l){
        if(a[j] != ','){
            c[i] = a[j] - '0';
            j++;
            i++;
        }
        else j++;
    }
    int e = 0;
    for(i = 0; i < l; i++){
        if(c[i] % 2 == 1){
            e++;
        }
    }
    if(e == l || e == 0){
        for(i = 0; i < l-1; i++){
            printf("%d,", c[i]);
        }
        printf("%d", c[l-1]);
    }
    else{
        int o = l - e;
        int ce[e];
        int co[o];
        int n = 0, m = 0;
        for(i = 0; i < l; i++){
            if(c[i] % 2 == 1){
                ce[m] = c[i];
                m++;
            }
            else{
                co[n] = c[i];
                n++;
            }
        }
        for(i = 0; i < e; i++){
            printf("%d,", ce[i]);
        }
        for(i = 0; i < o-1; i++){
            printf("%d,", co[i]);
        }
        printf("%d", co[o-1]);
    }
    return 0;
}
这个方法也不错
2022-09-14 10:48
gegemenjiuwo
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2022-9-13
收藏
得分:0 
回复 8楼 gegemenjiuwo
嗯,牛
2022-09-14 14:19
快速回复:这个有人懂吗
数据加载中...
 
   



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

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