每日一小练——数组的距离

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练!

题目:数组的距离

内容:已知两个元素从小到大排列数组x[]和y[],请编写一个程序算出两个数组元素彼此之间差的绝度值中最小的一个

数,此值称作数组的距离。

例如:x[]有1,3,5,7,9   y[]有2,6,8  那么最短距离就是1,因为x[0]和y[0]、x[1]和y[0]、x[2]和y[1]、x[3]和y[1]还有x[4]和

y[2]的距离都是1.

我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神。。奥,不对就解决了!然后发现这个题目有点像某oj上面的题目,不过现在看来还是挺简单滴。。嘿嘿。。我又进步了O(∩_∩)O~。

#include <iostream>
#include <math.h>
#define min(x,y) (x < y ? x : y)
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int sLength(int x[], int y[], int x_Length, int y_Length);
	int x[5] = { 1, 14, 31, 50, 70 };
	int y[5] = { 7, 23, 40, 60, 75 };
	int sL = sLength(x, y, 5, 5);
	cout << "两个数组的最短距离为: " <<  sL  << endl;
	getchar();
	return 0;
}

int sLength(int x[], int y[], int x_Length, int y_Length)
{
	int shortLength = TMP_MAX;
	int x_Index = 0;
	int y_Index = 0;
	while (x_Index < x_Length && y_Index < y_Length)
	{
		if (x[x_Index] >= y[y_Index])
		{
			shortLength = min(shortLength, (x[x_Index] - y[y_Index]));
			y_Index++;
		}
		else
		{
			shortLength = min(shortLength, (y[y_Index] - x[x_Index]));
			x_Index++;
		}
	}
	return shortLength;
}

实验结果是:

欢迎大家加入每日一小练,嘿嘿!

每天练一练,日久见功夫,加油!

      -End-

参考文献:《c语言名题精选百则》

每日一小练——数组的距离

时间: 2024-10-13 23:24:05

每日一小练——数组的距离的相关文章

每日一小练——最长平台问题

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:最长平台问题 内容:一直一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串同样的元素.而且这个元素不能再延伸. 比如,在1,2,2,3,3,3,4,5,5,6中1,2,2,3,3,3,4,5,5,6都是平台.试编写一个程序,接受一个数组,把这个数组中最长的平台找出来.在这个样例中, 3,3,3就是该数组的中的最长的平台. 说明: 这个程序十分简单,可是编写好却不easy,因此在编敲代码时应注意考虑以下几点:

每日一小练——等值首尾和

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:等值首尾和 内容: 假设有一个数组x[],它有n个元素,每一个都大于零:称x[0]+x[1]+...+x[i]为前置和,而x[j]+x[j+1]+...+x[n-1]为后置和.试编写一个程序,求出x[]中有多少组相同的前置和后置和. 例如:x[]的元素是3,6,2,1,4,5,2,于是x[]的前置和有以下7个,即3,9,11,12,16,21,23:后置和则2,7,11,12,14,20,23; 于是11,12,23,

每日一小练——等值数目

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:等值数目 内容:已知两个整数数组f[]与g[],它们的元素都已经从小到大排列好,而且两个数组中的元素都各不相同.例如,f[]中有1,3,4,7,9,而g[]中有3,5,7,8,10.试编写程序算出这两个数组之间有多少组相同的元素.就上例而言,f[2]和g[1]为3是一组:f[4]和g[3]为8是一组.所以共有两组. 经过了前两天的编写,我觉得程序不具有代表性,所以我打算以后把核心算法的部分写出函数的形式,这样看起来更直

每日一小练——支配值数目

上得厅堂.下得厨房.写得代码.翻得围墙.欢迎来到睿不可挡的每日一小练! 题目:支配值数目 内容:已知f[]和g[]两个整数数组.元素都已经从小到大排列.试编敲代码算出f[]中每个元素比g[]中每个元素大的个数的总数. 换句话说.f[0]比g[]中多少个元素大.f[1]比g[]中多少个元素大.这些值得总和就是所要求的答案. 比如,假设f[]中有1,3,5,7,9,而g[]中有2,4,6,7,8,比g[0]大的有f[1]~f[4],比g[1]大的有f[2]~f[4],比g[2]大的有f[2]~f[4

每日一小练——列出全部子集

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:列出全部子集 内容:写一个程序,列出{1,2,3,4,...,n}这个集合的全部子集,包含空集{ }. 解决问题的算法应该有非常多种,只是我发现了一种非常easy也非常好玩的方法,就是用二进制表示几何元素的方法 比方假设n是3,则子集有(不包含空集){1}{2}{3}{1,2}{1,3}{2,3}{1,2,3}就是1*{0,1}and2*{0,1}and3{0,1}每一个组合出现一次,所以也能够看成是{0,0,1}{0

每日一小练——按字典顺序列出所有排列

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:按字典顺序列出所有排列 内容:请写一个程序,用字典顺序列出n个元素的所有排列 这个问题有点小复杂,不是太好想,反正我是想了好久. 看到这个题目我先是想到的就是递归因为这个题目就是用指针对高位选择,然后将指针传给临近的低位再选择. 不过仔细研究原来没这么简单.以n=4举例当处理以1开头的排列时1234到1432,但是在排列2开头的时候不太好建立统一的递归关系.(没办法太统一的递归方法中将后面的数字选出来),所以将第一位分

每日一小练——快速Fibonacci数算法

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:快速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有如下规律: 尝试寻找快速的求出fn的方法 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了! 其实题目中就给出了这个算法的递归形式,所以首先我想到的是递归解法,不过因为求解快速方法在递归之前,我编写了一个非递归的算法 #include <iostream> usi

每日一小练——按字典顺序列出全部子集

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:按字典顺序列出全部子集 内容: 请写一个程序用字典顺序把一个{1,2,3,4,...,n}集合的全部子集找出来. 解答: 想必我就不用解释什么是字典顺序了,作为乘虚猿和攻城狮大家应该懂得,无论你懂不懂,反正我懂了! 事实上我们能够先列出一个实例,观察规律: 比如n=3 {1} {1,2} {1,2,3} {1,3} {2} {2,3} {3} 能够看出这种规律(假设你说我怎么没看出来,事实上你能够再多看一会!) 令一个

每日一小练——求质数

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:求质数 内容: 试编写一个程序,找出前N个质数.如果没有进一步要求,这不是难题.但在此希望从所知的.使用除法的方法中,用最快的办法来编写程序. 我的解法:上来没多想,打开vs2013就敲了起来,问题果然很简单,分分钟就超神..奥,不对就解决了!这个题目确实很简单,先看看常规解法吧! #include <iostream> #include <math.h> #define endNum 200 using