7-1 逆序输出数组元素的值
从键盘输入n个整数存入一维数组中,然后将数组元素的值逆序输出。
输入格式:
第一行输入整数个数n;
第二行输入n 个整数,数据之间以空格隔开。
输出格式:
逆序输出数组元素的值,每个数据之后跟一个空格。
输入样例:
10
11 22 99 33 88 76 56 45 89 10
输出样例:
10 89 45 56 76 88 33 99 22 11
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[105],i;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
for(i=n-1;i>=0;i--){
cout<<a[i]<<' ';
}
return 0;
}
7-2 将数组中的数逆序存放
本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。
输入样例:
4
10 8 1 2
输出样例:
2 1 8 10
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[15],i;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
for(i=n-1;i>=0;i--){
cout<<a[i];
if(i)cout<<' ';
}
return 0;
}
7-3 第几天
你知道,2012-1-1是该年的第1天,而9999-9-9呢?给你一个具体的日期,计算该日期是该年的第几天。
输入格式:
输入一个日期,格式为:Year-month-day。year是小于9999的正整数。
输出格式:
一个整数,表示该日期是该年的第几天。
输入样例:
在这里给出一组输入。例如:
2012-3-1
输出样例:
在这里给出相应的输出。例如:
61
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,a,b,c,x[15]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d-%d-%d",&a,&b,&c);
if(a%400==0||(a%4==0&&a%100))x[1]=29;
for(i=0;i<b-1;i++)
c+=x[i];
cout<<c;
return 0;
}
7-4 斐波那契
斐波那契数列,指的是这样一个数列:0,1,1,2,3,5,8,……,这个数列从第3项开始,每一项都等于前两项之和。求斐波那契数列的前n项。
输入格式:
输入一个n(n>=3)的值。
输出格式:
输出斐波那契数列的前n项。
输入样例:
在这里给出一组输入。例如:
6
输出样例:
在这里给出相应的输出。例如:
0,1,1,2,3,5
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[105],i,n;
cin>>n;
a[0]=0,a[1]=1;
for(i=2;i<n;i++)a[i]=a[i-1]+a[i-2];
for(i=0;i<n;i++){
if(i)cout<<",";
cout<<a[i];
}
return 0;
}
7-5 评委打分
班级里要搞智力竞赛啦!同学们都踊跃参加。进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分,最后结果如何呢?
输入格式:
第一行有十个整数,表示十位同学的初始分。第二行一个整数n,表示有n道题竞赛。
接下去有n行,每行有一个数字x,x表示本次可以加分的选手序号(每次答对者得10分)。
输出格式:
10个同学最终的得分值,每两位同学之间有一个空格。
输入样例:
10 0 0 0 10 10 0 0 0 10
3
1
10
1
输出样例:
30 0 0 0 10 10 0 0 0 20
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[105],i,n,x;
for(i=1;i<=10;i++)cin>>a[i];
cin>>n;
while(n--){
cin>>x;
a[x]+=10;
}
for(i=1;i<=10;i++){
if(i!=1)cout<<' ';
cout<<a[i];
}
return 0;
}
7-6 统计分数段人数
请对某次考试的分数,统计各分数段人数,统计原则:分别对10分以下、10-19分、20-29分、30-39分、40-49分、50-59分、60-69分、70-79,80-89分,90到99分,100分为一段,共11段 。
注意:如果输入分数不在[0,100]之间,不参与统计。
输入格式:
先输入一个整数n,表示将输入n个分数。
再输入n个分数,范围在[0~100].
每个数用空格间隔。
输出格式:
每一行输出一个分数段的人数统计结果。分数段用0~10表示。
输入样例:
在这里给出一组输入。例如:
6
50 60 98 100 0 1000
输出样例:
在这里给出相应的输出。例如:
0: 1
1: 0
2: 0
3: 0
4: 0
5: 1
6: 1
7: 0
8: 0
9: 1
10: 1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,a[15]={0},y;double x;
cin>>n;
while(n--){
cin>>x;
if(x>=0&&x<=100){y=x/10;a[y]++;}
}
for(i=0;i<=10;i++){
cout<<i<<": "<<a[i]<<endl;
}
return 0;
}
7-7 统计工龄
给定公司多名员工的工龄,按输入工龄顺序输出每个工龄段有多少员工。
输入格式:
给出多个整数,即每个员工的工龄,范围在[0, 50]。
输出格式:
按输入工龄顺序输出每个工龄的员工个数,格式为:“工龄:人数”。
每项占一行。
输入样例:
10 2 0 5 7 2 5 2
输出样例:
10:1
2:3
0:1
5:2
7:1
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,a[105]={0},i,y=0,b[105],c[55]={0};
while(cin>>x){
a[x]++;
b[y++]=x;
}
for(i=0;i<y;i++){
if(c[b[i]]==0)
{cout<<b[i]<<":"<<a[b[i]]<<endl;c[b[i]]=1;}
}
return 0;
}
7-8 调查电视节目受欢迎程度
某电视台要调查观众对该台8个栏目(设相应栏目编号为1~8)的受欢迎情况,共调查了n位观众(1≤n≤1000),现要求编写程序,输入每一位观众的投票情况(每位观众只能选择一个最喜欢的栏目投票),统计输出各栏目的得票情况。
输入格式:
输入在第1行中给出一个正整数n(1≤n≤1000),第2行输入n个整数,其间以空格分隔。
输出格式:
按顺序输出所有8个栏目的编号和得票数,每个数占4位,每行输出一个栏目的编号和得票数。
输入样例:
10
3 4 7 6 3 9 2 3 1 8
输出样例:
1 1
2 1
3 3
4 1
5 0
6 1
7 1
8 1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,i,a[1005];
cin>>n;
while(n--){
cin>>x;
a[x]++;
}
for(i=1;i<=8;i++){
printf("%4d%4d\n",i,a[i]);
}
return 0;
}
7-9 求最大值及其下标
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,i,a[1005],max;
cin>>n;
cin>>a[0];
max=a[0];
for(i=1;i<n;i++){
cin>>a[i];
if(a[i]>max)max=a[i];
}
for(i=0;i<n;i++){
if(a[i]==max){
cout<<max<<' '<<i;break;
}
}
return 0;
}
7-10 点赞
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1⋯FK”,其中1≤K≤10,Fi(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。
输出格式:
统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。
输入样例:
4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123
输出样例:
233 3
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k,x,i,a[1005]={0},max=0;
cin>>n;
while(n--){
cin>>k;
while(k--){
cin>>x;
a[x]++;
if(a[x]>max)max=a[x];
}
}
for(i=1000;i>=1;i--)
if(a[i]==max){cout<<i<<' '<<a[i];break;}
return 0;
}
7-11 根据所给数据,输入一个区间,输出其中最多的点赞量。
根据表中所给微博点赞数据:{3056,1169,2743,1616,2391,930,968,1011,1386,936},
输入一个区间,输出其区间最多的点赞量。
输入格式:
两个数据用空格隔开,例如输入:2 5
输出格式:
2743
输入样例:
4 7
输出样例:
2391
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,y,i,a[15]={0,3056,1169,2743,1616,2391,930,968,1011,1386,936},max=0;
cin>>x>>y;
for(i=x;i<=y;i++){
if(a[i]>max)max=a[i];
}cout<<max;
return 0;
}
7-12 排序
请编写程序对不超过50000个整数递增排序。
输入格式:
输入第一行一个正整数n,表示待排序的元素个数。第二行为n个整数,表示待排序的元素。n不超过50000。
输出格式:
输出为一行,表示排序结果,每个整数后一个空格。
输入样例:
5
5 4 3 2 1
输出样例:
1 2 3 4 5
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[500005],i;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
for(i=0;i<n;i++)cout<<a[i]<<' ';
return 0;
}
7-13 歌手得分
在歌手大赛中,有n个评委为参赛的歌手打分,分数为0~100分。歌手最后得分为去掉m个最高分和m个最低分后,剩余的n−2m个分数的平均值。
输入格式:
输入数据的第一行为一个正整数T,表示测试数据的组数,然后是T组测试数据。对于每组测试数据,第一行输入两个整数n,m(3<n<100,m<n/2),含义如上;第二行输入n个整数。
输出格式:
对于每组测试数据,输出一行,包含一个实数,表示歌手的最后得分。结果保留两位小数。
输入样例:
2
10 1
20 20 80 80 10 10 10 40 40 60
10 2
20 20 80 80 10 10 10 40 40 60
输出样例:
35.00
31.67
#include<bits/stdc++.h>
using namespace std;
int main(){
int t,n,m,i;
cin>>t;
while(t--){
cin>>n>>m;
int a[105],s=0;
for(i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
for(i=0+m;i<n-m;i++)s+=a[i];
printf("%.2f\n",s*1.0/(n-2*m));
}
return 0;
}
7-14 二分查找
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入格式:
输入共三行:
第一行是n值;
第二行是n个整数;
第三行是x值。
输出格式:
输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入样例:
4
1 2 3 4
1
输出样例:
0
2
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,i,x,a[1005],l,h,mid,y=1,k=0;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
cin>>x;
l=0,h=n-1;
while(1){
mid=(l+h)/2;
if((mid==0&&a[mid]!=x)||(mid==n-1&&a[mid]!=x)){k=1;break;}
if(a[mid]==x)break;
y++;
if(a[mid]>x)h=mid-1;
if(a[mid]<x)l=mid+1;
}
if(k)cout<<"-1\n"<<y;
else
cout<<mid<<endl<<y;
return 0;
}
7-15 找出不是两个数组共有的元素
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,i,a[105],b[105],c[100005]={0},x=0;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
cin>>m;
for(i=0;i<m;i++)cin>>b[i];
for(i=0;i<n;i++){
if(c[a[i]]==1)continue;
c[a[i]]=1;
int k=0;
for(int j=0;j<m;j++){
if(a[i]==b[j]){k=1;break;}
}
if(k==0){
if(x)cout<<' ';
cout<<a[i];
x=1;
}
}
for(i=0;i<m;i++){
if(c[b[i]]==1)continue;
c[b[i]]=1;
int k=0;
for(int j=0;j<n;j++){
if(b[i]==a[j]){k=1;break;}
}
if(k==0){
if(x)cout<<' ';
cout<<b[i];
x=1;
}
}
return 0;
}