逆序输出数组

逆序输出数组

时间: 1ms        内存:128M

描述:

下面的程序,采用指针访问的方式,从键盘给数组a[N]输入n个数据(n小于100),然后对元素值按逆序存放后输出。请补充完整下面的程序。
#include <iostream>
using namespace std;
const int N=100;
int main()
{
    int a[N],*p,*q;
    cin>>n;
    for(p=a; p<___(1)____; p++)
        ___(2)___;
    p=__(3)____;
    q=___(4)_____;
    while(p<q)
    {
        int r=*p;
        *p=*q;
        *q=r;
        ___(5)___;
        ___(6)___;
    }
    for(p=a; p<a+n; p++)
        cout<<*p<<' ';
    cout<<endl;
}

输入:

共n+1个整数,先输入n值,再输入n个整数

输出:

与输入顺序正好相反的n个整数

示例输入:

8 2 5 1 9 6 3 2 7

示例输出:

7 2 3 6 9 1 5 2

提示:

参考答案(内存最优[1096]):

#include<stdio.h>
int main()
{
    int a[100],n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d",&a[i]);
    for(--i;i>=0;i--)printf(i!=0?"%d ":"%d\n",a[i]);
    return 0;
}

参考答案(时间最优[0]):


#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
/* 获取输入数字的索引值,dec指定数字的位数,3代表百位数,order指定需要获取哪一位的索引,1代表个位,2代表十位,3代表百位 */
int get_index(int num, int dec, int order)
{
    int i, j, n;
    int index;
    int div;
    for (i=dec; i>order; i--)   /* 根据位数,循环减去不需要的高位数字 */
   {
n = 1;
        for (j=0; j<dec-1; j++)
            n *= 10;
        div = num/n;
        num -= div * n;
        dec--;
}
    n = 1;                      /* 获得对应位数的整数 */
    for (i=0; i<order-1; i++)
    n *= 10;
    index = num / n;            /* 获取index */
    return index;
}
                                /* 进行基数排序 */
void radix_sort(int array[], int len, int dec, int order)
{
    int i, j;
    int index;                  /* 排序索引 */
    int tmp[10000];             /* 临时数组,用来保存待排序的中间结果 */
    int num[10];                /* 保存索引值的数组 */
    memset(num, 0, 10*sizeof(int));  /* 数组初始清零 */
    memset(tmp, 0, len*sizeof(int)); /* 数组初始清零 */
    if (dec < order)                 /* 最高位排序完成后返回 */
        return;
    for (i=0; i<len; i++) {
        index = get_index(array[i], dec, order);  /* 获取索引值 */
        num[index]++;                         /* 对应位加一 */
    }
    for (i=1; i<10; i++)
    num[i] += num[i-1];                       /* 调整索引数组 */
    for (i=len-1; i>=0; i--) {
    index = get_index(array[i], dec, order);  /* 从数组尾开始依次获得各个数字的索引 */
    j = --num[index];                         /* 根据索引计算该数字在按位排序之后在数组中的位置 */
    tmp[j] = array[i];                    /* 数字放入临时数组 */
    }
    for (i=0; i<len; i++)
    array[i] = tmp[i];                        /* 从临时数组复制到原数组 */
    radix_sort(array, len, dec, order+1);     /* 继续按高一位的数字大小进行排序 */
    return;
}
int main(int argc, char *argv[])
{
    int i;
    int array[100000];
    int M;
    cin>>M;
    int len=M;                          /* 测试数据个数 */
    for(int q=0;q<M;q++)cin>>array[q];
    int dec=3;                          /* 数据位数,3代表3位数 */
    int order= 1;                       /* 排序的位数,1代表个位、2代表十位、3代表百位 */
    /* 排序函数,从个位开始 */
    radix_sort(array, len, dec, order);
    for (i=0; i<M; i++)
    printf("%d ", array[i]);
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注