期末数组函数加强练习

前言:由于时间问题,部分题解取自网友,但都是做过的好题。

对于有些用c++实现的题目,可以转化成c实现,cin看成c的读入,可以用scanf,输出cout看作printf,endl即换行符

开胃菜:

第一题:求简单交错序列前N项和

759973b7ab2543eaa3c1d540cbec2758.png

 

 

思路

要求和,我先定义一个sum来装每一项(注意有精度要求),然后每一项定义为item。然后观察可以知道,分母通项=4n-3,并且奇数项为正,偶数为负,所以等下来个if判断给他乘-1;

7a89597b0f964d5b8dd3428983425e5d.png

 

第二题:最小回文数:

06ccfe848b2447ce8eb5d6074724e714.png

分析:
核心的的思路就是要输出比n大的最小的回文数,我们可以这样,把n自增的数传入判断为回文数的函数里去,如果是就跳出循环记录此时的值,然后输出。

fdc55138eedc40f6ad69d572c74b937c.png

数组:

第一题:矩阵的对角线求和

 

aa29e27019e341bc8a41b84f2b9b802a.png

分析:

先是主对角线,就是从左上到右下的那条线,我们可以直观的发现它的行列坐标是相等,所以在C语言中的表现形式就是i==j;

        然后是副对角线,从右上到左下,通过观察我们可以发现在3*3矩阵中,副对角线上的元素行列坐标相加是等于4,但是这里要注意的是:在C语言中数组的下标是从0开始的。所以表现形式为:i+j==2。

#include<stdio.h>
int main()
{
    int a[3][3];
    int i,j,sum1 = 0,sum2 = 0;
    for(i=0; i<3; i++){
        for(j=0; j<3; j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0; i<3; i++){
        for(j=0; j<3; j++){
            if(i == j)
                sum1 += a[i][j];
            if(i + j == 2)
                sum2 += a[i][j];
        }
    }
    printf("%d %d\n",sum1,sum2);
    return 0;
}

第二题:数组插入处理

add98c061c4f444eb31b6271426af8f0.png

 

分析:

首先是输入只含有9个元素的数组a[10],用for循环依次输入。接着输入插入的数字m,将m与数组元素比较。

1、当m<=a[0]时,记录t=0;

2、当m>=a[8]时,记录9;

3、当a[i]<=x<=a[i+1]时,记录x应该插入的位置t=i+1。

但是插入m之前要把元素往后移位,从后往前直到位置t,最后把m赋值给a[t],用for循环输出排好的a[10]。
注意事项:1、找插入位置时注意break退出遍历循环,不然就会出错误;

                2、移位从后往前,不然从前往后会使数据丢失。

#include<stdio.h>
int main()
{
    int a[10], i, m, t;
    for (i = 0; i < 9; i++)
    {
        scanf("%d", &a[i]);
    }
    a[9] = 0;
    scanf("%d", &m);
    if (m <= a[0])
        t = 0;
    if (m >= a[8])
        t = 9;
    for (i = 0; i < 9; i++)
    {
        if (m >= a[i] && m <= a[i + 1])
        {
            t = i + 1;
            break;
        }
    }
    for (i = 9; i > t; i--)
    {
        a[i] = a[i - 1];
    }
    a[t] = m;
    for (i = 0; i < 10; i++)
    {
        printf("%d", a[i]);
        printf("\n");
    }
    return 0;
}

第三题:数字逆序输出

735cc4cbd34940fe9d9fbea6a836606b.png

分析:
1.题目要求是输入十个整数。
2.所以我们定义数组长度为10就可以了。
3.利用for循环输入与输出。

#include<stdio.h>
int main()
{
    int a[10],i,j;
    for(i=0;i<10;i++)        //注意这边是从i=0开始,到i<10
        scanf("%d",&a[i]);
    for(j=9;j>=0;j--)        //数组逆序输出,我们可以从j=9开始,一直做到j<0,就结束循环
        printf("%d ",a[j]);  //注意这边输出要空格隔开
    return 0;
}

 

第四题:数组替换
daa7c546c4ef456fb3b258ddf1758741.png分析:

过于简单,看代码即可,适合小白中的小白

using namespace std;
#include<bits/stdc++.h>
int main()
{
	int X[10];
	for (int i = 0; i < 10; i++)
	{
		cin >> X[i];
		if (X[i] <= 0)
			X[i] = 1;
	}
	for (int i = 0; i < 10; i++)
	{
		printf("X[%d] = %d\n", i, X[i]);
	}

}

第五题:最小数和它的位置

d2e8c3722d95416db432e12afa6a567f.png

上码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int min = 1001, n, arr[1001], flag;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
		if (arr[i] < min)
		{
			flag = i;
			min = arr[i];
		}
	}
	cout << "Minimum value: " << min << endl;
	cout << "Position: " << flag;



	return 0;
}

第六题:数组的右上半部分

a7f32dd1f6634834bea1daab38613267.png思路:

首先 创建二维数组,然后观察规律,行数是从0-10,列数是1-11,所以我从第一行开始遍历,然后关键是列数的区间,列数第一行是11个,并且逐层减1,那么你可以在纸上模拟一下,当i=0,j=11,j是我要求的个数,然后i=1,j=10,得出规律,即可

第七题:数组的下方区域

9ac381c4a6f44792b73a8fa1afcecdef.png思路:

寻找规律,遍历列数,i为行数,j为列数,行数和列数的和为11,得出规律即可实现

#include<bits/stdc++.h>
using namespace std;
int main()
{
	char a;
	cin >> a;
	double M[12][12], sum = 0, cnt = 0;
	for (int i = 0; i < 12; i++)
	{
		for (int j = 0; j < 12; j++)
		{
			cin >> M[i][j];
		}
	}
	for (int i = 7; i <= 11; i++)
	{
		for (int j = 12 - i; j <= i - 1; j++)
		{
			sum += M[i][j];
			cnt++;
		}
	}
	if (a == 'S')
	{
		printf("%.1lf", sum);
	}
	else if (a == 'M')
	{
		printf("%.1lf", sum/cnt);
	}

	return 0;
}

第八题:有趣的跳跃

acdaeede62104a9582c0c92cea737481.png分析:
 

1.标记flag为1 

2.输入数字 ,存放在一个数组中

3.进行相邻数相减,并取绝对值,存放在另一个数组中

4.对另一个数组进行从小到大排序 

5.判断,如果出现了第i个差的值不等于i的情况,这flag标为0

6.判断,输出 

#include<stdio.h>
#include<math.h>
int main()
{
    long long int n,i,j,t;
    int flag=1;//标记flag为1 
    scanf("%lld",&n);
    int a[n],b[n-1];
    for(i=0;i<n;i++)
        scanf("%lld",&a[i]);//输入数字,存放在一个数组中
    for(i=0;i<n-1;i++)
        b[i]=abs(a[i+1]-a[i]);//进行相邻数相减,并取绝对值,存放在另一个数组中 
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n-1;j++)
        {
            if(b[j]<b[i])
            {
                t=b[i];
                b[i]=b[j];
                b[j]=t;//对另一个数组进行从小到大排序 
            }
        }
    }
    for(i=0;i<n-1;i++)//判断 
    {
        if(b[i]!=i+1)
        {
            flag=0;
            break;//如果出现了第i个差的值不等于i的情况,这flag标为0 
        }
    }
    if(flag)//判断,输出 
        printf("Jolly");
    else
        printf("Not jolly");
    return 0;
}

第九题:校门外的树

7477c404a7e243e9989fcd6482ff7995.png思路:
 

定义一个数组;数组下标代表数轴上的每个整数点即0,1,2,……,n(长度为500的公路有501颗树);
把这个数组初始化全为1(为1代表有树,0代表被移除);

输入移除区域(x,y),把这个区域上的树全置0;(有多个,用循环控制);

输出为1的树的数目;

//C++
#include <iostream>
using namespace std;
int main()
{
    int L,M,x,y,a[10001];
    cin>>L>>M;
    for(int i=0;i<=L; i++)  //先将数组全赋值为1 
        a[i]=1;
    for(int i=0; i<M; i++)  
    {
        cin>>x>>y;      //[x,y]为区域区间
        for(int j=x; j<=y; j++)  //将区域区间内的值赋为0
            a[j]=0; 
    }
    int sum=0;
    for(int i=0; i<=L; i++)
    {
        if(a[i]==1)     //如果数组元素值是1 则计数加1 
            sum++; 
    }
    cout<<sum;
    return 0;
 }

如果用c和c++其实是可以互换的,

//C
#include <stdio.h>
 
//初始化数组值为1 
void InitArray(int *a,int num)
{
    for(int i=0; i<=num; i++)
    {
        a[i]=1;
    }
}
//将要移除的区域(x,y)置为0 
void InitZero(int *a,int x,int y)
{
    for(int i=x; i<=y; i++)
    {
        a[i]=0;    
    }  
} 
//输出值为1的即为结果 
void Result(int *a,int L)
{  
    int sum=0;
    for(int i=0; i<=L; i++)
    {
        if(a[i]==1)
            sum++;
    }
    printf("%d",sum);
}
int main()
{
    int a[10001]; //题意L<=10000 
    int L,M,x,y;
    while(scanf("%d%d",&L,&M))
    {
        InitArray(a,L);
        for(int i=0; i<M; i++)
        {
            scanf("%d%d",&x,&y);
            InitZero(a,x,y);
        }
            Result(a,L);
    } 
    return 0;
}

第十题:陶陶摘苹果
aad72c8a9ec34d8aa8680d3dd42e7cd7.png

思路:

#include<iostream>
using namespace std;
int main()
{
    int a[10],n,i,sum=0;
    for(i=0;i<10;i++)
    {
        cin>>a[i];
    }
    cin>>n;
    for(i=0;i<10;i++)
    {
        if(a[i]<=n+30)
            sum++;
    }
    cout<<sum;
    return 0;
}

函数

第一题:自定义函数求一元二次方程

77b4a6fdf697459e80249d7d04bd98fd.png

分析:
先知道求解公式

cd327d6907f84532a1a13626c2de2011.png如果无实数根

50e63810515e45c6ac9e1165691d5e3c.png

 

第二题:自定义函数之字符串反转

4d30f2bfa7ba4819a20124c51be74fb7.png

分析:

首先说一下会用到的标准库函数,gets(),puts(),strlen(),前两个是在头文件stdio.h中,后一个是在string.h里,用法如下:

        1、gets():与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

        2、puts(): puts 和 printf的用法一样,puts()函数的作用与语句“printf("%s\n",s);的作用相同。注意:puts在输出字 符串后会自动输出一个回车符。

        3、strlen():使用格式strlen(s)。返回s的长度,不包括结束符NULL。

 

其次我们的思路是申明一个exchange()函数用来做逆序,方法是:    

        b数组的第一个元素存储a数组的最后一个元素。l是数组a的长度,具体看代码,一目了然。

 

注:在将数组a的值赋给b数组之后,需要加一个b[j] = '\0'语句,不然会很烫的!这是因为我在将a的值赋给b的过程中并非是所有元素都有赋值,并且末尾没有结束符,而puts()输出字符串时要遇到'\0’也就是字符结束符才停止,所以要加上一句b[j] = '\0';

#include<stdio.h>
#include<string.h>
 
int exchange(char a[],char b[])
{
    int i,l,j = 0;
    l = strlen(a);
    for(i=l-1; i>=0; i--){
        b[j] = a[i];
        j++;
    }
    b[j] = '\0';       //给末尾加上结束符。
    return 0;
}
 
int main()
{
    char a[1000],b[1000];
    gets(a);
    exchange(a,b);
    puts(b);
    return 0;
}

第三题:自定义函数之字符串连接

9d1a3a7ecdec4639af9847508cd6057a.png分析:

此题可用指针来实现,即定义两个指针,用一个指针指向第二个字符的末尾\0,然后通过将

第用第一个指针指向第一个字符串的首元素,不断赋值到第二个字符串,直到第一个指针指向\0

然后记得添上\0。

//连接两个字符串,思路就是s接受的是str1的地址,t接受的是str2的地址,那么要把t赋值到s的末端,只需
//指向str1的指针s自增到/0的位置,然后把str2赋给str1,同时两种指针向后移动
//char* str_cat(char* s, char* t)
//{
//	char* p = s;
//	while (*s != '\0')
//	{
//		s++;
//	}
//	//出循环的时候s指向的是/0位置
//	//开始把str2赋给str1;
//	int i = 0;
//	while (*(t+i) != '\0')
//	{
//		*(s+i) = *(t+i);
//		i++;
//	}
//	*(s + i) = '\0';
//	return p;
//}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零构建属于自己的GPT系列6:模型部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

在线学习平台-学生端

在线学习平台------手把手教程&#x1f448; 学生端课程分页查询 sql: 学生登入时,只能看见自己的所属课程,需要关联查询,查出学生对应的课程 SELECTt2.course_id,t2.course_name,t2.course_cover,t2.teacher_id,t3.nick_name,t2.remarkfrom sys_user t1LEFT JOIN ms_course t…

计算机系统结构MIPS流水线

题目 其中&#xff1a;R3的初值是R2396。假设&#xff1a;在整个代码序列的运行过程中&#xff0c;所有的存储器访问都是命中的&#xff0c;并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器文件“定向”。问&#xff1a; &#xff08;1&#xff09;在没有任…

C++模板编程浅析

函数模板 声明与定义函数模板 #include <iostream> using namespace std; template <class T> void swap_new(T& a, T& b);int main() {int a 1, b 2;float c 1.5, d 3.6;swap_new(a, b);swap_new(c, d);cout << a << " " &…

Redis HyperLogLog 数据结构模型统计

HyperLogLog HyperLogLog 不是一种新的数据结构 &#xff0c; 本质上是字符串类型。 是一种基数算法。 通过 HyperLogLog 可以节省内存空间&#xff0c;并完成独立总数的统计。 HyperLogLog 数据结构可用于仅使用少量恒定内存来计算集合中的唯一元素&#xff0c;具体而言&…

Centos硬盘操作合集

一、硬盘命令说明 lsblk 列出系统上的所有磁盘列表 查看磁盘列表 参数意义 blkid 列出硬盘UUID [rootzs ~]# blkid /dev/sda1: UUID"77dcd110-dad6-45b8-97d4-fa592dc56d07" TYPE"xfs" /dev/sda2: UUID"oDT0oD-LCIJ-Xh7r-lBfd-axLD-DRiN-Twa…

【coco】掩膜mask影像转coco格式txt(含python代码)

最近在做实例分割&#xff0c;遇到二值掩膜影像——coco格式txt的实例分割转换问题&#xff0c;困扰很久&#xff0c;不知道怎么转换&#xff0c;转出来的txt没法用代码成功读取。一系列问题&#xff0c;索性记录下自己的结局路程&#xff0c;方便大家python代码自取。 目录 &…

Python开发运维:Python调用K8S API实现资源管理

目录 一、实验 1.Python操作K8S API获取资源 2.Python操作K8S API创建deployment资源 3.Python操作K8S API删除k8s资源 4.Python操作K8S API修改k8s资源 5.Python操作K8S API查看k8s资源 二、问题 1.Windows11安装kubernetes报错 2.Python通过调用哪些方法实现Pod和De…

C4D云渲染怎么提升速度小技巧?C4D云渲染速度提升技巧

当许多C4D用户转向云渲染时&#xff0c;他们常常会发现渲染速度并没有预期中的提升&#xff0c;这让人产生疑问&#xff0c;为什么使用云渲染服务后&#xff0c;渲染时间依然没有显著缩短&#xff0c;C4D云渲染情况取决于多个因素&#xff0c;如&#xff1a;渲染任务特点以及所…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索&#xff08;二&#xff09;&#xff1a;贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特&#xff08;Bellman-Ford&#xff09;算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下&#xff0c;寻找从…

代码上传的gitee平台

1.首先我们访问工作台 - Gitee.com进行注册和登录 2.我们创建一个仓库&#xff1a; 3.在本地创建我们的项目 在这文件夹里面我们打开git bush,执行 一下操作&#xff1a; git init &#xff1a;初始化仓库 git status&#xff1a;检查状态 git add . &#xff1a;将当前文件…

【wimdows电脑上管理员账户与管理员身份的区别】

管理员账户 在控制面板的用户账户中&#xff0c;点击更改账户类型&#xff0c;可以看到目前的账户是“管理员账户”还是“标准账户”。 管理员身份 在快捷方式上右击&#xff0c;可以看到&#xff0c;可以选择以管理员身份运行该软件。 如何查看某个应用是否以管理员身份…

6.Jetson Orin Nano 系统在NVME SSD上备份与恢复

Jetson Orin Nano 系统在NVME SSD上备份与恢复 刚开始我也参考其它博主写的系统备份与恢复&#xff0c;由于我Jetson 的系统盘是1t的&#xff0c;用dd命令拷贝的到另外一个1t的硬盘里面时&#xff0c;总会出现硬盘空间不足的情况出现。只能从小硬盘容量往大硬盘容量拷贝&#…

单通道led线性驱动芯片推荐:SM2082EGS

单通道LED线性驱动芯片是一种用于控制LED灯的芯片&#xff0c;它能够提供恒定的电流输出&#xff0c;从而实现LED灯的稳定亮度调节。这种芯片主要由输入端、控制电路、放大器和输出端构成&#xff0c;通过控制输入端的电压和信号来调节LED的亮度。 单通道led线性驱动芯片推荐&a…

JAVA:乘除窗体的实现

目录 题目要求&#xff1a; 窗口的实现&#xff1a; try 和 catch 的用法&#xff1a; 思路大意&#xff1a; 关键代码的实现&#xff1a; 题目要求&#xff1a; 使用 try 和catch 方法完成乘法除法的异常处理和窗体的实现&#xff0c;如下图所示&#xff1a; 窗口的实…

国际著名书画艺术家敖特:连续三届荣获世界美术大赛金奖

敖特 敖特是一位备受国际认可的蒙古族书画艺术家&#xff0c;以其卓越的才华和杰出的艺术成就而脱颖而出。他的艺术简历显示了他在国内外艺术大赛中多次荣获金奖&#xff0c;并获得了白俄罗斯、俄罗斯等国的最高艺术成就奖项&#xff0c;进一步证明了他在国际艺术界的卓越地位…

MidJourney笔记(7)-Seeds

我相信很多人在使用MidJourney的时候,都会遇到一个问题,就是如何保持生成图像的一致性,或者相对一致性,差异性不是很大。此时,我们就需要引入一个seed值,类似给这个提示词生成的图片做一个id标识。 那这个seed值怎么使用? 其实,在我们每次生成的图片,都有有一个seed值…

【Spring教程27】Spring框架实战:一文教你轻松掌握PostMan工具的安装与使用技巧!轻松搞定API测试!!!

目录 1 PostMan简介2 PostMan安装3 PostMan使用3.1 创建WorkSpace工作空间3.2 发送请求3.3 保存当前请求 4 发送步骤总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博…

【C语言:文件操作】

文章目录 1. 什么是文件1.1为什么有文件&#xff1f;1.2什么是文件1.3文件的分类1.4文件缓冲区 2.文件的打开与关闭2.1文件的打开(fopen)2.2文件的关闭(fclose) 3.顺序读写数据文件3.1读写字符3.2读写字符串3.3格式化读写3.4二进制读写 4.文件的随机读写4.1fseek4.2ftell4.3rew…

【docker】镜像使用(Nginx 示例)

查看本地镜像列表 docker images删除本地镜像 # docker rmi [容器 ID]docker rmi a6bd71f48f68 查找镜像 docker search nginx 参数介绍 NAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述OFFICIAL: 是否 docker 官方发布STARS: 点赞、喜欢AUTOMATED: 自动构建。 拉去镜像 …