关于怎么计算重复路段的算法问题

这是代码:

#define  _CRT_SECURE_NO_WARNINGS
#define  MAX_TEST 100
#include<stdio.h>
int main()
{
	int l, m;
	int u=0, v=0,j=0;
	int arr[MAX_TEST][10] = {0};
	int count=0;
	scanf("%d",  &l);
	scanf("%d",  &m);
	if (l <= 500 && l > m)
	{
		for (int i = 0, j = 5; i < m; i++, j++)
		{
			scanf("%d", &u);
			scanf("%d", &v);
			if (v > u)
			{
				arr[MAX_TEST][i] = v;
				arr[MAX_TEST][j] = u;
				count += v - u;
				/*arr[MAX_TEST][i]= ;
				count += v - u;*/
			}
			if (i && j)
			{
				if ((arr[MAX_TEST][i] > arr[MAX_TEST][j - 1]) && (arr[MAX_TEST][j] < arr[MAX_TEST][j - 1]) || ((arr[MAX_TEST][i - 1] > arr[MAX_TEST][j]) && (arr[MAX_TEST][j] > arr[MAX_TEST][j - 1])))
				{
					if ((arr[MAX_TEST][i] > arr[MAX_TEST][j - 1]) && (arr[MAX_TEST][j] < arr[MAX_TEST][j - 1]))
					{
						count = count - (arr[MAX_TEST][i] - arr[MAX_TEST][j - 1]);
					}
					else

						count = count - (arr[MAX_TEST][i] - arr[MAX_TEST][j - 1]) + v - u;
				}
			}
		}
		printf(" %d", (l - count - 1));	
	}
	else
		printf("输入有误");
	return 0;
}

  首先我就先说一下我的思路,由于是新手,我就没有用二维数组或者指针来写,我用的是数学方法,所以前面的都是初始化和判断这个条件符不符合,后面就是正常输出,我就不多解释了,我这里解释的是重复路段的怎么只计算一次的问题,好,话不多说,让我们圆规正传:

1.画图分析

这里需要的是500-公共部分(只减一次)

2.发现只有输入两端及两端以上才能重复,所以要用&&

3.根据来写就有两种

3.1先大后小

3.2先小后大

其他情况不成立,就没有重复段了




如果有什么好的方法也请多多指教!!!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值