【C/PTA】数组练习(编程)

简介: 【C/PTA】数组练习(编程)

本文结合PTA专项练习带领读者掌握数组,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。


7-1 计算最大值出现的次数

计算一维数组中最大值出现的次数。

输入格式:

输入在一行n( n<=1000,代表数组的大小),在下一行中输入 n个整数,为一维数组的元素。

输出格式:

输出最大值和出现的次数。

输入样例:

在这里给出一组输入。例如:

4

4 2 2 4

输出样例:

在这里给出相应的输出。例如:

4 2

#include <stdio.h>
int main()
{
  int n;
  scanf("%d",&n);
  int a[n];
  for(int i=0;i<n;i++)
  {
    scanf("%d",&a[i]);
  }
  int max=a[0];
  int count=0;
  for(int i=0;i<n;i++)
  {
    if(a[i]>max)
    max=a[i];
  }
  for(int i=0;i<n;i++)
  {
    if(max==a[i])
    count++;
  }
  printf("%d %d",max,count);
}

7-2 求一批整数中出现最多的个位数字

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:

3

1234 2345 3456

输出样例:

3: 3 4

#include<stdio.h>
int main()
{
    int i, n;
    int a[1000];//储存输入的整数
    int b[10]={0};//记录每个个位数字出现的次数,一开始均为0
    int t=-1;//暂时存储每个整数的个位数字
    int max=-1;//记录出现次数最多的个位数字的次数
    scanf("%d", &n);
  for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
  for(i=0;i<n;i++)//遍历每个整数
    {
         do//用do while将每一位都取出
        {
            t=a[i]%10;
            b[t]++; //如果是3,则b[3]的值加一
            a[i]=a[i]/10;
        }while(a[i]!=0);
    }
    //上一个循环结束后 b数组中储存的是每个数字对应的个数
    //现在找出出现次数最多的整数
    for(i=0;i<10;i++)
    {
        if(b[i]>max)
        {
            max=b[i];
        }
    }
    printf("%d:",max);
    for(i=0;i<10;i++)
    {
        if(max==b[i])//打印次数
        {
            printf(" %d",i);
        }
    }
    return 0;
}

7-3 装箱问题

假设有N项物品,大小分别为s1、s2、…、si、…、sN,其中si为满足1≤si≤100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。

输入格式:

输入第一行给出物品个数N(≤1000);第二行给出N个正整数si(1≤si≤100,表示第i项物品的大小)。

输出格式:

按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。

输入样例:

8

60 70 80 90 30 40 10 20

输出样例:

60 1

70 2

80 3

90 4

30 1

40 5

10 1

20 2

5

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[1000]={0};
    int k=1;//表示目前已使用的箱子数目
    for(int i=0;i<n;i++)
    {
        int t;
        scanf("%d",&t);//依次读入每个物品的大小
        for(int j=0;j<k;j++)
        {
            if(a[j]+t<=100)
            {
                a[j] += t;
                printf("%d %d\n",t,j+1);
                break;//从第一个箱子开始遍历,若当前箱子能够容纳该物品,则输出物品大小和箱子序号,并跳出当前循环;
            }
            if(j==k-1)
            {//如果遍历到最后一个箱子仍然无法容纳该物品,则开一个新的箱子 输出物品大小和新的箱子序号
                a[k] = t;
                k++;
                printf("%d %d\n",t,k);
                break;
            }
        }
    }
    printf("%d",k);
}

7-4 数组-值钱的微信号

总算到站了。尽管阿翔还是没有解锁出钥匙。但是who cares!听说会有学姐在火车站口迎接学弟,这才是当下最重要的事情啊!阿翔屁颠屁颠地跑向站口……

“胡大的同学请到这里来。”然而并没有学姐。阿翔看着这一个个英俊潇洒的帅比学长,失望极了。这时他注意到了旁边的那支队伍,怎么那么多学姐!她们右肩扛着学弟的行李,左肩扛着大旗,旗上还绣着fjnu。阿翔暗想,他要加入那支队伍,不然至少也得要几个微信号。忽然,他觉得身后传来阵阵杀气,扭头一看,学长们的眼里道道寒光裹挟着邪魅。阿翔咽了咽口水,他知道,为了革命吃点苦,是在所难免的了——

阿翔的钱包里共有K枚金币。这里有N个学长,每贿赂一个学长i,阿翔就能获得一个学姐的微信号,但是要消耗Bi枚金币。阿翔想在钱包还没被掏空的情况下得到尽可能多的微信号(注:钱包里的钱是一定不能花光的,至少也得给自己留一枚金币嘛!人生最大的悲剧莫过于积了一页的微信号,却没钱买流量!),问:阿翔最多能要到多少个微信号?

输入格式:

第一行为两个正整数 K(0 < K <= 100) 和 N(0 < N <= 50),表示阿翔共有K枚金币,这里共有N个学长。

第二行有N个整数Bi(0 <= Bi <= 100),表示贿赂第i个学长所需要消耗的金币数。

相邻两个整数间用空格隔开。

输出格式:

输出仅一行,即阿翔所能得到的最多的微信号数目。

输入样例:

20 10

10 9 8 7 6 5 4 3 2 1

输出样例:

5

#include <stdio.h>
int main()
{
    int k,n;
    scanf("%d%d",&k,&n);
    long long int a[n];
    for(int i=0;i<n;i++)
    {
        scanf("%lli",&a[i]);
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(a[j]>a[j+1])
            {
                int t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    int sum=0;
    for (int i=0;i<n;i++)
    {
        sum+=a[i];
        if(sum>=k)
        {
            printf("%d",i);
            break;
        }
        if(i==n-1&&sum<k)//最后一位学长
        {
            printf("%d",n);
        }
    }
    return 0;
}

7-5 数组-吹泡泡

Shc特别喜欢吹泡泡,他现在已经吹出了N个泡泡,根据他多年吹泡泡的经验,他很快就目测出了每个泡泡的半径(能精确到小数点后一位)。但是他的数学特别的差。 现在他想知道每个泡泡的体积大小。因为shc吹泡泡的技术高超,所以每个泡泡都是绝对的球体。你能帮助他求出每个泡泡的体积大小,并且从大到小输出吗?并且在输出体积的同时也请输出这个泡泡是shc吹的第几个泡泡。

输入格式:

第一行为一个正整数N(0 < N <= 1000),表示有N个泡泡。

接下来N行按吹泡泡的顺序每行输入一个半径r (r 为1到100的任意实数)

注意: Pai = 3.14

4/3 = 1.33

输出格式:

输出共N行,每行两个数字,第一个数字为泡泡的体积(保留两位小数),第二个数字表示泡泡的编号。两个数字之间用一个空格分隔。

注:如果两个泡泡的体积相同,应保证编号小的泡泡在前。

输入样例:

3

1.2

2.4

3.1

输出样例:

124.41 3

57.73 2

7.22 1

#include <stdio.h>
int main()
{
  int n;
  scanf("%d",&n);
  double a[n];//储存体积
  int b[n];//储存编号
  for(int i=0;i<n;i++)
  {
    scanf("%lf",&a[i]);
  }
  for(int i=0;i<n;i++)
  {
    a[i]=1.33*3.14*a[i]*a[i]*a[i];//编号为1、2、3...的泡泡体积
      b[i]=i+1;
  }
  //使用冒泡排序按照体积降序排序,同时保持编号顺序不变
  for(int i=0;i<n-1;i++)
  {
    for(int j=0;j<n-i-1;j++)
    {
      if(a[j]<a[j+1])
      {
        double t=a[j];
        a[j]=a[j+1];
        a[j+1]=t;
        int s=b[j];
        b[j]=b[j+1];
        b[j+1]=s;
      }
    }
  }
  for(int i=0;i<n;i++)
  {
    printf("%.2f %d\n",a[i],b[i]);
  }
  return 0;
}

7-6 数组-数学鬼才

As we know,HHD is a 数学鬼才。

这一天他为了给学弟学妹们展示他的计算能力,他决定口算阶乘。对于给出的每个N,他都会立刻算出N!的值。但是由于N!一般比较大,所以他只说出对2018取模的结果,即N!%2018。但是他发现看他表演的只有学弟,没有迷妹,所以他决定把这个任务交给你。

输入格式:

第一行输入一个正整数Q(0<Q<=100),表示Q次询问。

接下来Q行,每行一个N(0 < N <= 10^17)。

输出格式:

输出共Q行,每行对应一次询问,输出一个整数,即N!对2018取模的结果。

输入样例1:

2

4

6

输出样例1:

24

720

输入样例2:

1

19

输出样例2:

2000

#include <stdio.h>
#include <math.h>
int main()
{
  int q,sum=1;
  scanf("%d",&q);
  for(int i=1;i<=2018;i++)
  {
    sum=(sum*i)%2018;
  }//先计算2018的阶乘并对其取余 为后面做铺垫
  for(int i=1;i<=q;i++)
  {
    long long int n;
    scanf("%lli",&n);
    int t=1;
    if(n>2018)//如果输入的数大于2018,则将大数拆分为2018的倍数和余数
    {
      int s=n/2018;
      n%=2018;
      t=(t*(int)pow(sum,s))%2018;
    }
    for(int i=1;i<=n;i++)
    {
      t=(t*i)%2018;
    }
    printf("%d\n",t);
  }
}
目录
相关文章
|
编译器 开发工具 C++
Dev-C++详细安装教程及中文设置(附带安装包链接)
Dev-C++详细安装教程及中文设置(附带安装包链接)
10092 0
|
Android开发
mac下配置adb环境变量
在终端中输入adb命令时,会提示 command not found ,这是是因为mac电脑下没有配置Android环境变量或者环境变量配置错误。
|
存储 安全 数据安全/隐私保护
Token 是什么?全面解析身份认证中的 Token 机制
本文全面解析Token在身份认证中的核心机制,涵盖JWT、Session Token、OAuth等类型,深入讲解其工作原理、安全性策略、生命周期管理及实际应用场景,助力开发者构建安全高效的现代Web应用认证体系。
6443 4
|
7月前
|
消息中间件 人工智能 Cloud Native
下单丝滑,大促自由:古茗奶茶背后的云原生力量
在新茶饮行业,每一次刷屏级的营销活动,每一杯奶茶的“丝滑”下单,背后都是对数字化基座的严峻考验,是一场应对瞬时高并发流量的技术硬仗。作为拥有超万家门店的行业头部品牌,古茗不仅要支撑海量日常订单,更需在“周三会员日”等大促时刻,从容应对流量陡增,确保系统稳如磐石。面对高并发下的极速响应与弹性需求,古茗如何实现“大促自由”?本期《云故事探索》栏目走进古茗,揭秘支撑新茶饮“万店时代”的云原生力量。
748 63
|
存储 缓存 监控
怎么更好地设计一个优秀的SaaS系统
设计一个优秀的SaaS系统,需要从架构、性能、安全性、租户隔离、扩展性等多方面进行深思熟虑。根据业务需求选择合适的多租户架构,保证数据隔离的同时提高系统性能。
1929 1
|
10月前
|
缓存 网络安全 语音技术
docker安装部署FunASR
本指南详解FunASR在线语音识别服务的外网部署与内网迁移全流程:先在外网拉取Docker镜像、自动下载模型并启动服务(端口10095),验证成功后,将镜像和缓存模型打包导出;再于内网服务器导入镜像、解压模型、挂载运行,全程禁用SSL,支持热词与标点恢复,开箱即用。
5107 3
|
7月前
|
自然语言处理 安全 测试技术
【部署秒上手】OpenClaw 2.6.4 本地部署常见问题与解决方法(含安装包)
OpenClaw 2.6.4 部署不用慢慢摸索,汇总所有新手高频问题,闪退、报错、环境不兼容一键解决,附带适配安装包,步骤简单直白,小白也能秒上手,快速完成本地部署。
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1771 31
|
人工智能 自然语言处理 安全
💻 Codex 来了:OpenAI 推出多任务软件工程 AI 代理,开发者工作方式将被重塑?
Codex 是 OpenAI 推出的一款云端智能开发代理,基于优化后的 Codex-1 模型,能够执行从代码编写、Bug 修复到 PR 提交的完整工程任务。通过 ChatGPT 的界面,用户可向 Codex 分配任务,它将在独立沙盒中运行并返回结果。Codex 支持多任务异步处理,遵循项目规范(AGENTS.md),并生成日志与测试报告以确保透明性。作为“AI 参与式开发”的里程碑,Codex 不仅提升效率,还可能重塑开发者角色,使他们从具体编码转向指导 AI 完成任务,推动软件工程进入意图驱动的新时代。
2594 16
|
Oracle 关系型数据库 数据挖掘
服务器数据恢复—raid5阵列两块盘离线导致服务器数据丢失的数据恢复案例
服务器数据恢复环境: 某品牌x3850 X5服务器,服务器上有一组由5块硬盘组建的raid5阵列(包含一块热备盘),安装linux操作系统,运行oracle数据库。 服务器故障: 服务器上raid5阵列中两块硬盘由于未知故障离线,服务器数据丢失。北亚企安数据恢复中心安排服务器数据恢复工程师达到现场对故障服务器进行初检,发现raid5阵列中有两块硬盘处于离线状态;热备盘未激活,经过检测没有发现物理故障,无明显同步表现。
服务器数据恢复—raid5阵列两块盘离线导致服务器数据丢失的数据恢复案例