头歌作业复盘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.二分法查找
这个数据结构的原理
//输入包括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);
}