2023-2024-1高级语言程序设计-一维数组

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},
输入一个区间,输出其区间最多的点赞量。

1.png

输入格式:

两个数据用空格隔开,例如输入: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;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星河欲转。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值