2021/12/7电脑实验课有记

一、鞍点问题

思想方法:先找到行中最大,再找最大存在的列中的最小

#include<stdio.h>
#define N 3//任意数
#define M 4//同上
int main()//鞍点问题:该行最大
{
	int a[N][M], i, j, max, min, m,I;//m存储序数,i构建列内部循环
	printf("来吧,输入九个数字构成3*3的数组,回车键表示输入完成\n");
	for (i = 0; i < N; ++i)//input numbers to the array
		for (j = 0; j < M; ++j)
			scanf_s("%d", &a[i][j]);
	for (I = 0; I < N; ++I)
	{
		max = a[I][0];
		
		for (j = 1; j < M; ++j)//在当前行进行比较
		{
			if (max < a[I][j])
			{
				max = a[I][j];
				m = j;
			}//find the max in the line,then change the i;

		}
		min = a[I][m];
		int flag = 1;//控制输出
		for (i = 0; i < N; ++i)
		{
			
			if (min > a[i][m])
			{
				flag = 0;
				printf("第%d行你以为的鞍点作废了,非列内最小值\n", I+1);//趣味项目,别人以为你有病系列,其实是为了监测
				break;
			}
			
		}
		if (flag == 1)
			printf("功夫不负有心人!你找到了鞍点:%d\n", a[I][m]);
		if (flag == 0)
			printf("真不好意思,第%d行没有鞍点\n", I+1);
	}
	return 0;
}

二、有序数组中查找元素

遍历,二分

#include<stdio.h>
#define N 15//任意数
int main()
{
	int b, m, i;
	
	int a[N] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };//put numbers in the array
	printf("请输入你要找的元素:\n");
	scanf_s("%d", &b);//input a
	m = (N+1)/ 2;
	i = m;
	m = m / 2;
	do
	{
		
		if (b > a[i])
			i = i + m;
		if (b < a[i])
			i = i - (m+1);
		if (b == a[i])
		{
			printf("find it! 是第%d个元素", i+1);
			break;
		}
		if (m == 0)//第一次运行出现问题:端点值无法比较,想到的解决方案:将m的改变推后;然后也将对i的改变做出了调整
		{
			printf("没找到");
			break;
		}
		m = m / 2;
	} while (b != a[i]);
	return 0;
}

说明:代码均加了解释符号,如有需要复制的请记得删除解释符号

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值