| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1057 人关注过本帖
标题:关于小米(OJ)#5 的疑问,代码在自己电脑上正常输出,在OJ上不行,求大佬解 ...
只看楼主 加入收藏
cs001
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-9-26
收藏
 问题点数:0 回复次数:1 
关于小米(OJ)#5 的疑问,代码在自己电脑上正常输出,在OJ上不行,求大佬解答!!
小米OJ:code.

#5 问题描述:[找出旋转有序数列的中间值]
------------------
给出一个有序数列随机旋转之后的数列,如原有序数列为:[0,1,2,4,5,6,7] ,旋转之后为[4,5,6,7,0,1,2]。
假定数列中无重复元素,且数列长度为奇数。 求出旋转数列的中间值。如数列[4,5,6,7,0,1,2]的中间值为4。

INPUT: 4,5,6,7,0,1,2           OUTPUT: 4
输入样例:
1
1,2,3
4,5,6,7,0,1,2
12,13,14,5,6,7,8,9,10
输出样例:
1
2
4
9
------------------

我的答案: (main.c) [OJ 提示错误原因:运行超时]
------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FLAG int
#define MAX 100


/* clear array */
void clear(int *A, int len){
    int i = 0;
    for(i; i < len ; i++)
        A[i] = 0;
}


/* merge to a complete int number */
int mergeint(int first, char second){
    int temp = first * 10;
    temp += (second - '0');
    return temp;
}

void selectionSort(int *A, int len){
    int min_index = 0;
    for(int i = 0; i < len - 1 ; i++){
        min_index = i;
        for(int j = i + 1; j < len ; j++)
            if (A[j] < A[min_index])
                min_index = j;
        /* swap A[i] and A[min_index] */
        if (min_index != i){    /* Occur An Error Here without IF() ,at first time... */
            A[min_index] = A[i] + A[min_index];
            A[i] = A[min_index] - A[i];
            A[min_index] = A[min_index] - A[i];
        }
    }
}

int main() {

    int A[MAX] = {0};
    int index = 0, len = 0;
    char c = getchar();

    FLAG new = 0;
    while(c != EOF) {
        while (c != '\n') {
            if (c == ',') {
                c = getchar();
                new = 1;
                continue;
            } else {
                if (c >= '0' && c <= '9') {
                    if (new) index++;
                    A[index] = mergeint(A[index], c);
                    new = 0;
                }
                c = getchar();
            }
        }
        selectionSort(&A, index + 1);
        printf("%d\n", A[(index + 1)/2]);
        /* clear */
        clear(&A, index+1);
        index = 0;
        new = 0;

        /* new */
        c = getchar();
    }
    return 0;
}
------------------
搜索更多相关主题的帖子: index 输出 数列 new int 
2019-09-26 19:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
你代码这么长,别人哪有功夫去猜?

说说我的思路吧
数据录入中就可以获得旋转起点,和长度。
中值就在 (起点+n/2)%n 位置上
2019-09-26 23:30
快速回复:关于小米(OJ)#5 的疑问,代码在自己电脑上正常输出,在OJ上不行,求 ...
数据加载中...
 
   



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

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