信息学奥赛一本通题选(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;
}
队列常用的方法:
②定义队列: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;
}

浙公网安备 33010602011771号