编程题目分享:生成满足要求的数组

/*
输入整数n,生成一个长度为n的数组a。
数组a需要满足条件:a[a[i]] = n - a[i] + 1。
输出的数组不仅需要满足条件,还需要最大数组序。
举例:
输入:
2
输出:
2 1
*/

#include <iostream>
#include <numeric>  //使用iota函数需要numeric库
#include<vector>
using namespace std;

int main() {
    int n;  //输入数组长度n
    cin >> n;

    int* a = new int[n];  //申请堆用于存储数组
    //int a[1000];  //可以直接用数组,后面就不用delete,但不知道创建的数组长度
    iota(a, a + n, 1);  //初始化数组为 1,2,3,4,...
    for (int i = 0; i < n; ++i) {  //通过循环修订数组的值
        a[a[i] - 1] = n - a[i] + 1;  //可能需要多个循环,并加入判断条件
    }
    for (int i = 0; i < n; ++i) {  //打印输出
        cout << a[i] << " ";
    }
    delete[] a;

    ////---使用vector容器---
    //vector<int> a;
    //for (int i = 0; i < n; ++i) {
    //    a.push_back(i + 1);
    //}
    //for (int i = 0; i < n; ++i) {
    //    a[a[i] - 1] = n - a[i] + 1;
    //}
    //for (int i = 0; i < n; ++i) {
    //    cout << a[i] << " ";
    //}

    return 0;
}

/*
(1)其实这里有规律:2个数{2,1},3个数{3,2,1},...,100个数{100,99,98,...,2,1}都是满足条件的。
(2)题目要求最大数组序,该代码没有考虑到。
(3)需要多重循环进行判断,确保数组满足等式条件,该代码只循环了一次。
*/

全部评论

相关推荐

每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务