Codeup《算法笔记》2.5数组(包含字符串)

问题 A: 习题6-4 有序插入

题目描述
有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。
假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序)已经按从小到大进行排序。
然后再从键盘上输入一个整数,将此整数插入到前有序的9个数中,使得最终的10个数依然是从小到大有序的。
输入
第一行输入以空格分隔的9个整数数,要求按从小到大的顺序输入。
第二行输入一个整数
输出
从小到大输出这10个数,每个数一行。
样例输入

1 11 21 31 41 51 61 71 81
45

样例输出

1
11
21
31
41
45
51
61
71
81
#include<bits/stdc++.h>
using namespace std;

int main(){
	int a[10]={0};
	for(int i = 0; i < 9; i++){
		scanf("%d",&a[i]);
	}
	scanf("%d",&a[9]);
	//sort(a,a+10);//直接使用函数
	//使用冒泡排序
	int temp;
	for(int i = 0; i < 10; i++){
		for(int j = 0; j < 10-i-1; j++){
			if(a[j]>a[j+1]){
				temp = a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
	for(int i = 0; i < 10; i++){
		printf("%d\n",a[i]);
	}
	return 0;
}

问题 B: 习题6-5 数组元素逆置

题目描述
将一个长度为10的整型数组中的值按逆序重新存放。
如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1
输入
从键盘上输入以空格分隔的10个整数。
输出
按相反的顺序输出这10个数,每个数占一行。
样例输入

1 2 3 4 5 6 7 8 9 0

样例输出

0
9
8
7
6
5
4
3
2
1
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[10];
	for(int i = 0; i < 10; i++){
		scanf("%d",&a[i]);
	}
//	for(int i = 9; i >= 0; i--){
//		printf("%d\n",a[i]);
//	}
	reverse(a,a+10);
	for(int i = 0; i < 10; i++){
		printf("%d\n",a[i]);
	}
	return 0;
}

逆序数组
reverse(数组名,数组名+长度);

问题 C: 习题6-6 杨辉三角

题目描述
按要求输入如下格式的杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
最多输出10层

输入
输入只包含一个正整数n,表示将要输出的杨辉三角的层数。
输出
对应于该输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开

样例输入

5

样例输出

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	int a[10][10]={};
	scanf("%d",&n);
	
	for(int i = 0; i < n; i++){
		a[i][0]=a[i][i]=1;
		for(int j = 1; j < i; j++){
			a[i][j]=a[i-1][j]+a[i-1][j-1];
		}
	}
	for(int i = 0; i < n; i++){
		for(int j = 0; j <= i; j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
} 

找规律即可

问题 D: 习题6-12 解密

题目描述
有一行电文,已按如下规律译成密码:

A–>Z a–>z

B–>Y b–>y

C–>X c–>x

… …

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。

输入
输入一行密文
输出
解密后的原文,单独占一行。
样例输入

ZYX123zyx

样例输出

ABC123abc
#include<bits/stdc++.h>
using namespace std;
int main(){
	char a[26];
	gets(a);
	for(int i = 0; i < strlen(a); i++){
		if('A'<=a[i]&&a[i]<='Z'){
			a[i]=155-a[i];
		}else if('a'<=a[i]&&a[i]<='z'){
			a[i]=219-a[i];
		}
	}
	puts(a);
	return 0;
} 

字符直接+数字使用,即可变换
char a;
scanf("%c",&a);
printf("%c",155-a);//%c输出字符,%d输出对应数字

问题 E: 习题6-13 字符串比较

题目描述
比较两个字符串s1和s2的大小,如果s1>s2,则输出一个正数;若s1=s2,则输出0;若s1<s2,则输出一个负数。
要求:不用strcpy函数;两个字符串用gets函数读入。
例如:“A"与"C"相比,由于"A”<“C”,应输出负数,同时由于"A"与"C"的ASCII码差值为2,因此应输出"-2"。
同理:"And"和"Aid"比较,根据第2个字符比较的结果,“n"比"i"大5,因此应该输出"5”
输入
输入2行字符串
输出
一个整数,表示这两个字符串 比较的差值,单独占一行。
样例输入 Copy

And
Aid

样例输出 Copy

5
#include<bits/stdc++.h>
using namespace std;

int main(){
	char a[20],b[20];
	gets(a);
	gets(b);
	for(int i = 0; i < strlen(a); i++){
		if(a[i]==b[i]){
			if(i==strlen(a)-1){
				printf("0");
				break;
			}
			
		}
		else if(a[i]<b[i]){
			printf("-%d",b[i]-a[i]);
			break;
		}
		else if(a[i]>b[i]){
			printf("%d",a[i]-b[i]);
			break;
		}
	}
	return 0; 
} 

问题 F: 例题6-1 逆序输出数组元素

题目描述
从键盘上输入10个整数,存储在一个长度为10的整型数组中,要求将输入的10个数逆序输出。
如输入为:0,1,2,3,4,5,6,7,8,9 输出为9,8,7,6,5,4,3,2,1,0

输入
10个整数,以空格分隔
输出
将输入的10个整数逆序输出,每个数占一行。
样例输入

0 1 2 3 4 5 6 7 8 9

样例输出

9
8
7
6
5
4
3
2
1
0
#include<bits/stdc++.h>
using namespace std;

int main(){
	int a[10];
	for(int i = 0; i < 10; i++){
		scanf("%d",&a[i]);
	}
	for(int i = 9; i >= 0; i--){
		printf("%d\n",a[i]);
	}
	return 0;
}

问题 G: 例题6-2 数组求解Fibonacci数列问题

题目描述
Fibonacci数列的特点:第1,2个数为1,1。从第3个数开始,概述是前面两个数之和。即:
要求输出Fibonacci数列的前20个数。
输入

输出
Fibonacci数列的前20个数,每个数占一行。
样例输入 Copy

样例输出 Copy

1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
#include<bits/stdc++.h>
using namespace std;

int main(){
	int a[20];
	for(int i = 2; i < 20; i++){
		a[0]=a[1]=1;
		a[i]=a[i-1]+a[i-2];
	}
	for(int i = 0; i < 20; i++){
		printf("%d\n",a[i]);
	}
	return 0;
} 

变:(变成函数,输入20,再输出)

#include<bits/stdc++.h>
using namespace std;

int Fib(int n){
	int a[n];
	for(int i = 0; i < n; i++){
		if(i==1||i==0){
			a[i]=1;
		}
		else{
			a[i]=a[i-1]+a[i-2];
		}
	}
	for(int i = 0; i < n; i++){
		printf("%d\n",a[i]);
	}
}


int main(){
	int n;
	scanf("%d",&n);
	Fib(n);
	return 0;
} 
//递归
int Fibonacci(int n){
	if(n==1||n==2){
		return 1;
	}
	else
		return Fibonacci(n-1)+Fibonacci(n-2); 
}

//循环 
int Fib(int n){
	if(n==1||n==2){
		return 1;
	}
	int first=1,second=1;
	int temp;
	for(int i = 3; i <= n ; i++){
	    temp = first+second;
		first = second;
		second = temp; 
	}
	return second;//return temp也行 
}

问题 H: 例题6-3 冒泡排序

题目描述
从键盘上输入10个整数,用冒泡法对这10个数进行排序(由小到大)。
输入
以空格分隔的10个整数
输出
依次输出排好序的10个整数,每个数占一行。
样例输入

1 3 5 7 9 2 4 6 8 0

样例输出

0
1
2
3
4
5
6
7
8
9
#include<bits/stdc++.h>
using namespace std;

int main(){
	int a[10];
	for(int i = 0; i < 10; i++){
		scanf("%d",&a[i]);
	}
	int temp;
	for(int i = 0; i <= 8; i++){
		for(int j = 0; j < 10-i-1; j++){
			if(a[j]>a[j+1]){
			temp = a[j];
			a[j] = a[j+1];
			a[j+1] = temp; 
			}
		}
	}
	for(int i = 0; i < 10; i++){
		printf("%d\n",a[i]);
	}
	return 0;
} 

问题 I: 例题6-4 矩阵转置

题目描述
将一个2行3列的矩阵(二维数组)行列互换,存储到另一个3行2列的矩阵中。
要求以整型数据为例来解答。

输入
输入2行数据,每行3个整数,以空格分隔。
输出
行列互换后的矩阵,3行,每行2个数据,以空格分隔。
样例输入 Copy

1 2 3
4 5 6

样例输出 Copy

1 4
2 5
3 6
#include<bits/stdc++.h>
using namespace std;

int main(){
	int a[2][3];
	int b[3][2];//用另一个数组进行存储!!!!
	for(int i = 0; i < 2; i++){
		for(int j = 0; j < 3; j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(int i = 0; i < 3; i++){
		for(int j = 0; j < 2; j++){
			b[i][j]=a[j][i];
		}
	}
	for(int i = 0; i < 3; i++){
		for(int j = 0; j < 2; j++){
			printf("%d ",b[i][j]);
		}
		printf("\n");
	}
	return 0;
} 

问题 J: 例题6-9 字符串求最大值

题目描述
从键盘上输入3个字符串,求出其中最大者。
输入
输入3行,每行均为一个字符串。

输出
一行,输入三个字符串中最大者。
样例输入 Copy

England
China
America

样例输出 Copy

England

用strcmp(a,b)

#include<bits/stdc++.h>
using namespace std;

int main(){
	char a[20];
	char b[20];
	char c[20];
	
	gets(a);
	gets(b);
	gets(c);
	
	if(strcmp(a,b) >= 0){
		if(strcmp(a,c)>0){
			puts(a);
		}
		else{
			puts(c);
		}
	}
	
	if(strcmp(a,b) <= 0){
		if(strcmp(b,c)>0){
			puts(b);
		}
		else{
			puts(c);
		}
	}
	return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值