信息学奥赛一本通题选(1)

【例5.1】反序输出 (2034)

时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。
【输入】
输入一行共有n个数,每个数之间用空格隔开。
【输出】
如题要求:一行,共有n个数,每个数之间用一个空格隔开。
【输入样例】
1 7 3 4 5
【输出样例】
5 4 3 7 1

点击查看参考代码
#include<bits/stdc++.h>
usingnamespacestd;
int main(){
    int n,i=0;
    int num[n+1];
    while(cin>>n){
        num[i++]=n;
        if(getchar()=='\n'){
            break;
        }
    } 
    for(int j=i-1;j>=0;j--){
        cout<<num[j]<<" ";
    }

    return0;
}

【例5.2】平移数据(2035)

时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
将a数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。
【输入】
第一行为数组a的元素个数(数组元素个数小于50);
第二行为n个小于1000的正整数。
【输出】
平移后的数组元素,每个数用一个空格隔开。
【输入样例】
10
1 2 3 4 5 6 7 8 9 10
【输出样例】
2 3 4 5 6 7 8 9 10 1

前置知识点:
(1)定义数组:数据类型 数组名[长度];
(2)通常数组的下标从0开始

题目分析:
题目中“第一个元素移到数组末尾”:a[n-1]=a[0]
“其余数据依次往前平移一个位置”:a[i]=a[i+1],或者a[i-1]=a[i]。具体哪种写法需要看循环时下标的开始位置。
实现时需要注意的是,不能先将第一个元素移到数组末尾(这样数组末尾原本的数据发生变化);也不能先将数据依次往前平移一个位置(这样数组的第一个元素原本的数据也发生变化)。而应该:
(1)先将第一个元素用中间变量存起来
(2)再平移后面的数据
(3)最后将中间变量中的数据放到数组末尾

点击查看参考代码
#include<bits/stdc++.h>
usingnamespacestd;
int main(){
    int n;
    cin>>n;
    int a[n+1];
    for(int i=0;i<n;i++){//向数组中输入数据 
        cin>>a[i];
    } 
    int t=a[0]; 
    for(int i=0;i<n-1;i++){
        a[i]=a[i+1];
    }
    a[n-1]=t;
    //输出数组
    for(int i=0;i<n;i++){//向数组中输入数据 
        cout<<a[i]<<" ";
    } 
    return0;
}
第二种解法——采用“队列” 需要先知道什么是队列: ![](https://img2024.cnblogs.com/blog/3514977/202502/3514977-20250207121125469-711240100.png) 通过这个图,我们不难发现,①队列的特点:先进先出。

队列常用的方法:
②定义队列:queue<数据类型>队列名
③求队列的长度:size()
④求队首元素:front()
⑤删除元素:pop()
⑥插入:push()
⑦判断队列是否为空:empty()
注意:以上的队列是C++中的STL标准模板库提供的,需要导入头文件

点击查看代码
#include<bits/stdc++.h>
#include<queue>
usingnamespacestd;
int main(){
    queue<int>q; 
    int  n,a;
    cin>>n; 
    //数据插入到队列
    for(int i=1;i<=n;i++){
        cin>>a;
        q.push(a);
    }
    // 获取队首元素
    int k=q.front();

    //插入到队列中 
    q.push(k); 
    //删除队首元素 
    q.pop();

    //先输出再删除 
    for(int i=1;i<=n;i++){
        cout<<q.front()<<" ";
        q.pop();
    }
    return0;
}

posted @ 2025-04-30 23:13  gdyyx  阅读(94)  评论(0)    收藏  举报