头歌作业复盘11.17

发布时间 2023-11-17 19:00:39作者: lulixiu

头歌作业复盘2

1.找鞍点,具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小
#include <stdio.h>

void find(int a[100][100],int m,int n) 
{
	int i,j,k;
for(i=0;i<m;i++)//一行一循环
	{
int max=a[i][0];
int col=0;

// Find the maximum element in the row
for (j=1;j<n;j++)//遍历该行的每一列 
if(a[i][j]>max) {
max=a[i][j];
col=j;//标记这列 
}
// Check if it is also the minimum in its column
int is_point=1;//判断元素 
		for (k=0;k<m;k++)//再次遍历,在该列中每行的元素进行比较,不是最小值就跳出这个小循环 
if(a[k][col]<max){
is_point=0;
break;
}
// Output saddle point if found
if (is_point)//如果判断元素仍然是1,即找到了,就可以直接打印出来了 
printf("Array[%d][%d]=%d",i,col,max);

}
}

int main() 
{
int m,n,i,j;
scanf("%d %d",&m,&n);
int a[100][100];
for (i= 0;i<m;i++)
for (j=0;j<n;j++) 
scanf("%d",&a[i][j]);
find(a,m,n);
return 0;
} 

2.二分法查找

这个数据结构的原理

https://www.bilibili.com/video/BV1yG4y1U7X2/?spm_id_from=333.337.search-card.all.click&vd_source=820b9c660af324466fd9712ae8c3632f

//输入包括3行,第一行为整数n,第二行包括n个整数,以空格分隔,第三行为整数m。

//找到整数m,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None
#include<stdio.h>

int erfen(int a[], int target, int left, int right) 
{
while (left<=right) 
	{
int mid=left+(right-left)/2;//标记中间值 

		if(a[mid]==target) 
return mid;
else if(a[mid]<target)//向左缩小范围 
left=mid+1;
else //向右缩小范围 
right=mid-1;
}
return -1; // 目标元素未找到
}

int main() 
{
int a[100],n,i; 
scanf("%d",&n);
for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	int target;
scanf("%d",&target);
int result=erfen(a,target,0,n-1);
if (result==-1)
printf("None");
else
printf("%d",result+1);
return 0;
} 

3.字符串排序
#include <stdio.h>
#include <string.h>

void swapStrings(char *str1, char *str2)
{
char temp[100];//通过字符串复制函数来交换赋值 
strcpy(temp, str1);
strcpy(str1, str2);
strcpy(str2, temp);
}

int main() {
char a[100];
char b[100];
char c[100];
scanf("%s\n%s\n%s", a,b,c);
//调用字符串比较函数,成立就为1 
if (strcmp(a,b) > 0) {
swapStrings(a,b);
}
if (strcmp(a,c) > 0) {
swapStrings(a,c);
}
if (strcmp(b,c) > 0) {
swapStrings(b,c);
}
printf("%s\n%s\n%s\n",a,b,c);
return 0;
} 

4.字符串处理

//如输入"BEIJING","123",3,则输出:"BEI123JING"。
#include<stdio.h>
#include<string.h>

void main()
{
	char a[100],b[100],c[100];
	int i,f;
	scanf("%s%s%d",a,b,&f);
	
	for(i=0;i<f;i++)
		c[i]=a[i];
	c[f]='\0';//在结尾处添加null后续才算一个字符串 
	strcat(c,b);//c=bei123

	for(i=0;b[i]!='\0';i++)
		b[i]='\0';//重复利用b数组 
	for(i=f;a[i]!='\0';i++)//初始化 
		b[i-f]=a[i];//b=jing
	b[i-f]='\0';//老套路 

	strcat(c,b);//连接字符串	
	printf("%s",c);
}