| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 521 人关注过本帖
标题:可以运行,提交了说运行错误。。
只看楼主 加入收藏
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
可以运行,提交了说运行错误。。
题目:
     输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,奇数部分降序排列输出,偶数部分升序输出。
例:
  输入:
    8 13 25 18 56 11 77 98
  输出:
    77 25 13 11 8 18 56 98

本人的代码:
#include<stdio.h>
#include<math.h>
int main()
{
    char a[10];
    int s=0,state=0,in=1,out=0,i=0,j=0,x,ou[100],ji[100],o=0,p=0;
    while(1)
    {
        a[i]=getchar();
        if(state==out&&(a[i]!=' '&&a[i]!='\n'))
        {
            state=in;
            i++;
        }
        else if(state==in && (a[i]!=' '&&a[i]!='\n') )
            i++;
        else if(state==out&&a[i]=='\n')
            break;
        else if(state==in &&(a[i]==' '||a[i]=='\n'))
        {
            for(j=i-1;j>=0;j--)
              s+=(a[j]-48)*pow(10,i-1-j);
              if(s%2==0) {
                ou[o]=s;
                o++;
            }
            else {
                ji[p]=s;
                p++;
            }
            s=0;
            if(a[i]=='\n')break;
            state=out;
            i=0;
        }
        else  ;  
    }
    for(i=0;i<o;i++)
        for(j=i+1;j<o;j++)
            if(ou[i]>ou[j]){
                x=ou[i];
                ou[i]=ou[j];
                ou[j]=x;
            }
    for(i=0;i<p;i++)
        for(j=i+1;j<p;j++)
            if(ji[i]<ji[j]){
                x=ji[i];
                ji[i]=ji[j];
                ji[j]=x;
            }
    for(i=0;i<p;i++){
        printf("%d",ji[i]);
        if(i<p-1)printf(" ");
    }
    if(o!=0)
    {  
        if(p!=0)printf(" ");
        for(i=0;i<o;i++){
            printf("%d",ou[i]);
            if(i<o-1)printf(" ");
        }
    }
    return 0;
}
搜索更多相关主题的帖子: include 
2011-12-04 15:22
心灵百合
Rank: 5Rank: 5
等 级:职业侠客
帖 子:215
专家分:367
注 册:2011-3-30
收藏
得分:5 
你说要输入一个整数数组,干嘛设一个字符数组char a[10];判断是否为整数或偶数的条件表达式会出错的
2011-12-04 16:27
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:8 
你这数据的读取部分怎么写成这个样子?题在地址在哪儿?
用过qsort函数没?没用过查一查用法。
送你一个比较函数。
程序代码:
int cmp(const void * a, const void * b)
{
    int ta, tb;
    ta = *(int *)a & 1 ? -*(int *)a : *(int *)a;
    tb = *(int *)b & 1 ? -*(int *)b : *(int *)b;
    return ta - tb;
}

重剑无锋,大巧不工
2011-12-04 17:23
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
收藏
得分:0 
回复 2楼 心灵百合
因为不知道数组的长度,如果不弄成字符型,我按回车无法把答案输出。。
2011-12-05 17:50
double聪
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:118
注 册:2011-11-19
收藏
得分:0 
回复 3楼 beyondyf
快速排序吗?个人觉得数据少的排序还是冒泡比较节省代码量。谢谢你的建议
2011-12-05 17:53
离开天空的云
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:110
专家分:198
注 册:2011-8-12
收藏
得分:7 
回复 4楼 double聪
不知道数组的长度可以动态定义呀 代码写的很乱 运行出错也是太“乱”了吧~~如果单纯只是做到题目上所说的话,为什么还要用到数学函数? 还有字符类型...
给你个思路吧 定义变量分别为sz[5],ou[5],qi[5],ouu=0,qii=0,szz=0假设输入数个数为5个, 挨个输入一个数组的元素值 输入后判断是否为偶数 是偶数则存放到ou[ouu]数组元素中,然后ouu加1,否者就存放到qi[qii]数组元素中,同样qii也加1,输入完成后判断ouu和qii是否小于或等于0 如果条件成立就做相应的处理(比如说qii变量等于0或1就说明只有1个奇数或0,那么就没有排序的必要了,就直接去排序ou数组)条件不成立就排序俩个数组(偶数从小到大排 奇数数组从大到小排,题目的要求~~排序就用冒泡法吧~~哈哈)排序完成后循环for(f=0;f<ouu;f++)如果ouu等于0的话就跳过这个循环直接下一个循环,不写跳过应该也会自动跳过的吧?(没测试过..不知道~~!!)循环内部就把SZ[szz]元素重新赋值ou[f],在把szz加1,循环结束后在执行循环for(f=szz;f<szz+qii;f++)循环内部也用sz[szz]复制qi[f],qii等于0的话就不执行 还是一样不写也应该会自动跳过~~~然后输出数组sz就ok啦~~
大概就是这样了 代码自己写好啦~~~哈哈
2011-12-05 19:27
快速回复:可以运行,提交了说运行错误。。
数据加载中...
 
   



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

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