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

/*
输入整数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)需要多重循环进行判断,确保数组满足等式条件,该代码只循环了一次。
*/

全部评论

相关推荐

09-23 17:42
门头沟学院 Java
兄弟们我绷不住了,小米要求10月份参加编程考试,20级以下(王腾好像21),正式和外包都得去,还要部门大排名,一巴掌给我抽象的回到大学
flex*1022:雷:我们想了很久,到底怎么样才能让用户满意,让工程师保持手感,经过长达180天的思考,我连夜睡服高管,决定发起内部考试,以编程为主
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
no_work_no...:大专三年最辛苦的应该是手机和电脑了吧
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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