通过最小差值问题导入排序和数组模块

日期:2023-11-4

1.理解最小差值问题的本质:

关键在于对于不限位数的整数所罗列出来的多个不限个数的数字进行组合作差或是排序作差

由于设计到两个不限,此列问题需导入数组知识,对于数字进行储存后分别处理,寻求最小差值,定离不开有序的组合或是逻辑计算中合理的排序方式。程序在设计过程中简化这步骤,也可以提高相应的运行效率,所以也可以考虑建立函数对于数组进行处理,后进行作差比较。

2.整合出的两种做法:对应两种不同的思维方式

(1)方法一:导入数组元素,剥离数组元素逐个相减,并判断差值的正负,可以考虑绝对值函数简化判断过程。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a[1000];
	int i,n,j,k;
	int min, m_min;
	min = 10000;
	scanf("%d", &n);
	for (i = 0; i < n; i++)//导入数组元素
	{
		scanf("%d",&a[i]);
	}
	for (j = 0; j < n; j++)
	{
		for (k = 0; k < j; k++)//剥离数组元素逐个相减,并判断差值的正负,这段应该可以用绝对值函数简化
		{
			if (a[j] - a[k]==0)
			{
				min = 0;
				break;
			}
			else if ((a[j] - a[k]) > 0)
			{
				m_min = a[j] - a[k];
				if (m_min < min)
				{
					min = m_min;
				}
			}
			else if((a[j] - a[k] )< 0)
			{
				m_min = a[k] - a[j];
				if (m_min < min)
				{
					min = m_min;
				}
			}
		}
	}
	printf("%d\n", min);//循环结束后输出
	return 0;
}

(2)方法二:先进行排序,后作差比较最小差值

#include<stdio.h>
#include<math.h>
int a[100000];
int main() {
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    for (int i = 2; i <= n; i++) {
        int change = a[i];
        int j = i - 1;
        while (j >= 0 && a[j] > change) {
            a[j + 1] = a[j];
            j--;
        }
        a[j + 1] = change;
    }
    int min = a[2] - a[1];
    for (int i = 2; i <= n; i++) {
        int ans = a[i] - a[i - 1];
        if (min > ans) {
            min = ans;
        }
    }
    printf("%d", min);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值