这是代码:
#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先小后大
其他情况不成立,就没有重复段了
如果有什么好的方法也请多多指教!!!