当前位置: 首页 > news >正文

【PTA|期末复习|编程题】数组相关编程题(一)

目录

7-1 乘法口诀数列 (20分)

输入格式:

输出格式:

输入样例:

输出样例:

样例解释:

代码

7-2 矩阵列平移(20分)

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-3 组合数的和(15分)

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-4 求集合数据的均方差(15分)

输入格式:

输出格式:

输入样例 1:

输出样例 1:

输入样例 2:

输出样例 2:

代码

7-5 矩阵A乘以B(15分)

输入格式:

输出格式:

输入样例1:

输出样例1:

输入样例2:

输出样例2:

代码

7-6 点赞(20分)

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-7 数组循环左移(20分)

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-8 数列求和-加强版(20分)

输入格式:

输出格式:

输入样例:

输出样例:

代码


7-1 乘法口诀数列 (20分)

本题要求你从任意给定的两个 1 位数字 a1​ 和 a2​ 开始,用乘法口诀生成一个数列 {an​},规则为从 a1​ 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。

输入格式:

输入在一行中给出 3 个整数,依次为 a1​、a2​ 和 n,满足 0≤a1​,a2​≤9,0<n≤103。

输出格式:

在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

2 3 10

输出样例:

2 3 6 1 8 6 8 4 8 4

样例解释:

数列前 2 项为 2 和 3。从 2 开始,因为 2×3=6,所以第 3 项是 6。因为 3×6=18,所以第 4、5 项分别是 1、8。依次类推…… 最后因为第 6 项有 6×8=48,对应第 10、11 项应该是 4、8。而因为只要求输出前 10 项,所以在输出 4 后结束。

编译器:GCC

代码

#include<stdio.h>
int main()
{int a1 = 0;int a2 = 0;int n = 0;scanf("%d %d %d", &a1, &a2, &n);int arr[1000] = { 0 };arr[0] = a1;arr[1] = a2;int i = 0;int mul = 0;int count = 2;for (i = 0; i < n; i++){mul = arr[i] * arr[i + 1];if (mul > 9){arr[count++] = mul / 10;arr[count++] = mul % 10;}else{arr[count++] = mul;}if (count == n){break;}}printf("%d", a1);for (i = 1; i < n; i++){printf(" %d", arr[i]);}return 0;
}

7-2 矩阵列平移(20分)

给定一个 n×n 的整数矩阵。对任一给定的正整数 k<n,我们将矩阵的偶数列的元素整体向下依次平移 1、……、k、1、……、k、…… 个位置,平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。

输入格式:

输入第一行给出 3 个正整数:n(<100)、k(<n)、x(<100),分别如题面所述。

接下来 n 行,每行给出 n 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。

输出格式:

在一行中输出平移后第 1 到 n 行元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

7 2 99
11 87 23 67 20 75 89
37 94 27 91 63 50 11
44 38 50 26 40 26 24
73 85 63 28 62 18 68
15 83 27 97 88 25 43
23 78 98 20 30 81 99
77 36 48 59 25 34 22

输出样例:

440 399 369 421 302 386 428

样例解读

需要平移的是第 2、4、6 列。给定 k=2,应该将这三列顺次整体向下平移 1、2、1 位(如果有更多列,就应该按照 1、2、1、2 …… 这个规律顺次向下平移),顶端的空位用 99 来填充。平移后的矩阵变成:

11 99 23 99 20 99 89
37 87 27 99 63 75 11
44 94 50 67 40 50 24
73 38 63 91 62 26 68
15 85 27 26 88 18 43
23 83 98 28 30 25 99
77 78 48 97 25 81 22

编译器:GCC

代码

#include<stdio.h>int main()
{int n,k,x;scanf("%d %d %d",&n,&k,&x);int a[n][n];int f=1;for(int i=0;i<n;i++)for(int j=0;j<n;j++){scanf("%d",&a[i][j]);}for(int j=1;j<n;j+=2){for(int i=n-1;i>=f;i--){a[i][j] = a[i-f][j];}for(int i=0;i<f;i++){a[i][j] = x;}f = f%k+1;}for(int i=0;i<n;i++){int sum = 0;for(int j=0;j<n;j++){sum += a[i][j];}if(i==0) printf("%d",sum);else printf(" %d",sum);}return 0;
}

7-3 组合数的和(15分)

给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。

输入格式:

输入在一行中先给出 N(1 < N < 10),随后一行给出 N 个不同的非 0 个位数字。数字间以空格分隔。

输出格式:

输出所有可能组合出来的2位数字的和。

输入样例:

3
2 8 5

输出样例:

330

编译器:GCC

代码

#include<stdio.h>
int main()
{int m,sum=0,s[10];scanf("%d",&m);for(int i=0;i<m;i++){scanf("%d",&s[i]);sum+=s[i]*(m-1)*10+s[i]*(m-1);}printf("%d",sum);return 0;
}

7-4 求集合数据的均方差(15分)

设计函数求 N 个给定整数的均方差。若将 N 个数 A[ ] 的平均值记为 Avg,

输入格式:

输入首先在第一行给出一个正整数 N(≤104),随后一行给出 N 个正整数。所有数字都不超过 1000,同行数字以空格分隔。

输出格式:

输出这N个数的均方差,要求固定精度输出小数点后5位。

输入样例 1:

10
6 3 7 1 4 8 2 9 11 5

输出样例 1:

3.03974

输入样例 2:

1
2

输出样例 2:

0.00000

编译器:GCC

代码

# include<stdio.h>
# include<math.h>
int main()
{int A[10000],m,i,j,sum=0;double x,y1=0,y2=0;scanf("%d",&m);for(i=0;i<m;i++){scanf("%d",&A[i]);sum+=A[i];}x=sum*1.0/m;for(i=0;i<m;i++){y1+=(A[i]-x)*(A[i]-x);}y2=sqrt(y1/m);printf("%0.5lf",y2);return 0; }

7-5 矩阵A乘以B(15分)

给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。

输入格式:

输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。

输出格式:

若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出Error: Ca != Rb,其中Ca是A的列数,Rb是B的行数。

输入样例1:

2 3
1 2 3
4 5 6
3 4
7 8 9 0
-1 -2 -3 -4
5 6 7 8

输出样例1:

2 4
20 22 24 16
53 58 63 28

输入样例2:

3 2
38 26
43 -5
0 17
3 2
-11 57
99 68
81 72

输出样例2:

Error: 2 != 3

编译器:GCC

代码

#include<stdio.h>
int main()
{int row1 = 0;int col1 = 0;scanf("%d %d", &row1, &col1);int arr1[100][100] = { 0 };int i = 0;//输入第一个矩阵for (i = 0; i < row1; i++){int j = 0;for (j = 0; j < col1; j++){scanf("%d", &arr1[i][j]);}}int row2 = 0;int col2 = 0;scanf("%d %d", &row2, &col2);int arr2[100][100] = { 0 };//输入第二个矩阵for (i = 0; i < row2; i++){int j = 0;for (j = 0; j < col2; j++){scanf("%d", &arr2[i][j]);}}//判断if (col1 != row2){printf("Error: %d != %d", col1, row2);}else{//输出乘积矩阵printf("%d %d\n",row1,col2);for (i = 0; i < row1; i++){int j = 0;for (j = 0; j < col2; j++){int sum = 0;int k = 0;for (k = 0; k < row2; k++){sum += arr1[i][k] * arr2[k][j];}printf("%d", sum);if (j != col2 - 1){printf(" ");}else{printf("\n");}}}}return 0;}

7-6 点赞(20分)

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输入在第一行给出一个正整数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

编译器:GCC

代码

#include <stdio.h>
int main(){int i,j,k,N,K,F,max=0,cha[1001]={0};scanf("%d",&N);for(i=0;i<N;i++){scanf("%d",&K);for(j=0;j<K;j++){scanf("%d",&F);cha[F]++;if(cha[F]>cha[max]){max=F;}if(cha[F]==cha[max]&&F>max){max=F;}}}printf("%d %d",max,cha[max]);return 0;}

 

7-7 数组循环左移(20分)

本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(am​⋯an−1​a0​a1​⋯am−1​)(最前面的m个数循环移至最后面的m个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

输入第1行给出正整数n(≤100)和整数m(≥0);第2行给出n个整数,其间以空格分隔。

输出格式:

在一行中输出循环左移m位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:

8 3
1 2 3 4 5 6 7 8

输出样例:

4 5 6 7 8 1 2 3

编译器:GCC

代码

#include<stdio.h>
int main(){int i,n,j;int k;scanf("%d",&n);int m;scanf("%d",&m);int a[n];for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<m;i++){//每次移动一位,一共移动m次k=a[0];//保存第一位的值for(j=0;j<n-1;j++){a[j]=a[j+1];//数组向左移动}	a[n-1]=k;	//让最后一位等于原本的第一位的值}for(i=0;i<n-1;i++){printf("%d ",a[i]);}printf("%d",a[n-1]);//结尾没有空格return 0;

7-8 数列求和-加强版(20分)

给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。

输入格式:

输入数字A与非负整数N。

输出格式:

输出其N项数列之和S的值。

输入样例:

1 3

输出样例:

123

编译器:GCC

代码

#include <stdio.h>int main() {
int result[100000]={0};//存放结果的每一位
int a=0,n=0;
scanf("%d %d",&a,&n);
int i=n;
int flag=0;
int cnt=0;//控制存放结果的位数:从低位开始存 
if(n==0)
printf("%d",0);
else
{for(;i>=1;i--){int temp=i*a+flag;result[cnt++]=temp%10;flag=temp/10;}//输出结果:从高位开始输出 if(flag!=0)//要注意高位 result[cnt++]=flag; i=cnt-1;for(;i>=0;i--){printf("%d",result[i]);}
}return 0;}

相关文章:

  • 【WebSocket】微信小程序原生组件使用SocketTask 调用星火认知大模型
  • LeetCode374. Guess Number Higher or Lower——二分查找
  • 关于C++的花括号初始化的方式解释及示例
  • AI大模型学习笔记之四:生成式人工智能(AIGC)是如何工作的?
  • 【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
  • 北斗卫星在物联网时代的应用探索
  • 2024牛客寒假算法基础集训营3
  • Three.js蒙皮骨骼变化原理 | 逆推蒙皮网格的世界位置
  • STM32CubeMX,定时器之定时功能,入门学习,如何设置prescaler,以及timer计算PWM输入捕获方法(重要)
  • 机器学习系列——(十五)随机森林回归
  • 【数据分享】1929-2023年全球站点的逐日平均风速数据(Shp\Excel\免费获取)
  • 搭建macOS开发环境-1:准备工作
  • 2.0 Zookeeper 安装配置
  • 从 F-Droid 安装 termux
  • 回归预测模型:MATLAB多项式回归
  • 4个实用的微服务测试策略
  • canvas 高仿 Apple Watch 表盘
  • extjs4学习之配置
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • KMP算法及优化
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • webpack入门学习手记(二)
  • Zsh 开发指南(第十四篇 文件读写)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 计算机在识别图像时“看到”了什么?
  • 坑!为什么View.startAnimation不起作用?
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 学习使用ExpressJS 4.0中的新Router
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 运行时添加log4j2的appender
  • Java数据解析之JSON
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ![CDATA[ ]] 是什么东东
  • (C语言)共用体union的用法举例
  • (笔试题)分解质因式
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net FrameWork简介,数组,枚举
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [AIGC 大数据基础]hive浅谈
  • [hibernate]基本值类型映射之日期类型
  • [hive] sql中distinct的用法和注意事项
  • [IE9] GPU硬件加速到底是实用创新还是噱头
  • [LeetCode][LCR190]加密运算——全加器的实现
  • [MySQL数据库部署及初始化相关]
  • [NAND Flash 7.1] 闪存系统性能优化方向集锦?AC timing? Cache? 多路并发?
  • [Raspberry Pi] Raspberry Pi 4配置OpenCV4.6.0和ncnn环境(32-bit operation system)
  • [Redis]——数据一致性,先操作数据库,还是先更新缓存?
  • [RK3568 Android11] Binder驱动结构体
  • [RK-Linux] Linux A/B System详解
  • [Search Engine] 搜索引擎技术之网络爬虫
  • [Shell]Linux常用快捷键
  • [Tyvj1462]凸多边形
  • [UI5 常用控件] 03.Icon, Avatar,Image
  • [Valkyrie网络测试仪-软件使用技巧] - Scheduler动作录制,定制打流过程(中途启停/调整带宽/使能部分流量)