| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1265 人关注过本帖
标题:大侠留步。。。给定n个数输入n-1个数怎么输入
只看楼主 加入收藏
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:15 
大侠留步。。。给定n个数输入n-1个数怎么输入
已知数组A[1..n]的元素类型为整型,设计算法调整A,使其左边的所有元素小于零,右边的所有元素大于等于零。(要求算法的时间复杂度和空间复杂度均为0(n))
Input

数组大小

数组中个元素
Output

排列后的数组元素
Sample Input
6  
5 6 -1 5 1
5
3 3 -1 -1 2
Sample Output
-1 5 6 5 1
-1 -1 3 3 2
求教
搜索更多相关主题的帖子: 空间 设计 元素 
2011-12-02 10:50
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:5 
程序代码:
int i=0;
while(--n)
{
    scanf("%d",a[i]);
}
2011-12-02 11:05
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
回复 2楼 laznrbfe
可是如果是7呢、、、
2011-12-02 11:09
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:0 
回复 3楼 tianqiao
n=7;
1.while(--n),n=6,输入a[0];
2.while(--n),n=5,输入a[1];
3.while(--n),n=4,输入a[3];
4.while(--n),n=3,输入a[4];
5.while(--n),n=2,输入a[5];
6.while(--n),n=1,输入a[6];
7.while(--n),n=0,跳出循环

2011-12-02 11:14
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
程序代码:
void work(int *a, int n)
{
    int i, j, t;
    for(i = 0, j = n - 1; i < j;)
    {
        if(a[i] < 0){ i++; continue;}
        if(a[j] >= 0){ j--; continue;}
        t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}
能完成你题目的要求,但排序并不稳定,题中要求稳定的结果了么?

重剑无锋,大巧不工
2011-12-02 11:14
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
回复 4楼 laznrbfe
不是这个  而是如果n是7输入5个数呢   这里面n是一个大于输入个数的数
2011-12-02 11:17
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
不好意思,没注意你想要的是输入。你数组有错。如果第一组的6是正确的那么第二组也为6,如果第二组是正确的,那第一组就是5。
这是一段测试代码。
程序代码:
#include<stdio.h>
void work(int *a, int n)
{
    int i, j, t;
    for(i = 0, j = n - 1; i < j;)
    {
        if(a[i] < 0){ i++; continue;}
        if(a[j] >= 0){ j--; continue;}
        t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}
int main()
{
    int a[1000], n, i;
    while(scanf("%d", &n) != EOF)
    {
        for(i = 0; i < n; i++) scanf("%d", &a[i]);
        work(a, n);
        for(i = 0; i < n; i++) printf("%d ", a[i]);
        printf("\n");
    }
    return 0;
}

重剑无锋,大巧不工
2011-12-02 11:24
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:0 
回复 6楼 tianqiao
不懂。。。
2011-12-02 11:26
tianqiao
Rank: 2
等 级:论坛游民
帖 子:80
专家分:55
注 册:2011-9-21
收藏
得分:0 
回复 7楼 beyondyf
题目是错了,,,但是这是acm平台上的,,,老师说什么容错性,,可以解决的
2011-12-02 11:28
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
程序代码:
#include <iostream>
#include <assert.h>
using namespace std;
int *m_data = NULL;

int main(){
    int m_num;
    cin>>m_num;
    if(!m_data)
        m_data = new int[m_num];
    assert(m_data!=NULL);
    for(int i=0;i<m_num;i++){
        cin>>m_data[i];
    }
    int _I1 = 0;
    for(int i=0;i<m_num;i++){
        if(m_data[i] < 0){
            int _I2 = m_data[i];
            m_data[i] = m_data[_I1];
            m_data[_I1] = _I2;
            _I1++;
        }
    }
    for(int i=0;i<m_num;i++)
        cout<<m_data[i]<<" ";
    cout<<"\n";
    if(m_data)
        delete [] m_data;
    return 1;
}
2011-12-02 11:32
快速回复:大侠留步。。。给定n个数输入n-1个数怎么输入
数据加载中...
 
   



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

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