打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
算法题24 根据上排给出十个数,在其下排填出对应的十个数

给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】

举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0在下排出现了6次,1在下排出现了2次,
2在下排出现了1次,3在下排出现了0次....
以此类推..

解题思路:关键是理解“要求下排每个数都是先前上排那十个数在下排出现的次数”。

做以下分析:设总共有n个数,上排a[0...n-1],下排b[0...n-1],。

1)下排n个数的累加和为n,即b[0]+b[1]+...+b[n-1] = n

2)ai*bi的累加和也为n,即a[0]*b[0]+a[1]*b[1]+...+a[n-1]*b[n-1] = n

3)对于b中任意一个元素b[j], 都存在i,a[i] = b[j].

4)对于b中任意一个元素b[j],都有b[j] >= 0

5)如果a中存在负数。其在b中出现的次数一定为0. 如果a中数值大于n,则其出现次数也为0.

6)a中至少有两个非0数值在b中出现的次数非0

a:由1)n > n*b[i],其中b[i]为最小值,则a b中一定均有数值0,否则无解。设a[0] = 0,b[0]为a[0]在b中出现次数。

b:由于b中一定存在0,则0的出现次数一定大于0,因此b[0]>0 且b[0] < n,b[1...n-1]中至少一个值为0. 非0元素出现的次数一共是n-b[0].

c:有2)和6)对任意a[i],a[i]*b[i] < n,即b[i] < n/a[i],对所有a[i]>=n/2的元素中,在b中出现的次数必须最多只有1个出现次数不为0,且为1.其余出现次数均为0,即[1, n/2)范围内最多只有n/2-1个元素,故0出现的次数必不小于n/2, [n/2,n)范围内的元素必有一个出现次数为1。因此a数列中也必须有1,否则无解。

d:有c得在数值范围为(0,n/2)中(假设有x这样的数)出现的次数和s为n - b[0]或n-b[0]-1。其中1出现的次数至少为1(由c得)。又如果1出现的次数为1,则1出现的次数已经为2,故1出现的次数必大于1.设为x,则x出现的次数至少为1,而x>1,如果x出现的次数大于1,那么必须要有其他数出现的次数为x,这样无法收敛。故x出现的次数只能为1,1出现的次数只能为2.

另外:(感谢coolria提出)如果上排数列中无0,则下排数列全是0,是其唯一解。

结论:

1)如果上排数列中有0,此时如果上排数列中无0,1,2,n-4这四个数,则下排数列无解;否则下排数列中0出现的次数为n-4;1出现的次数为2;2出现的次数为1;n-4出现的次数为1;其余为0。

2)如果上排数列中无0,则下排数列全0,是其唯一解。

查看评论
6楼 ccc64524422 2013-04-26 21:15发表[回复]
楼主结论错误。如果上排给出如下数字
1 2 3 4 5 6 7 6 5 4
那么结果可以是
0 0 0 0 0 0 0 0 0 0
当然也可以是
1 0 0 0 0 0 0 0 0 0
所以说,结论第二条还是有点问题滴
Re: 方寸之间 2013-04-26 22:48发表[回复]
回复ccc64524422:上排没有0,下排也不能有0
Re: ccc64524422 2013-04-27 12:10发表[回复]
回复wcyoot:结论中2)如果上排数列中无0,则下排数列全0,是其唯一解。
在这里上排无0 ,下排全是0。
另外上排给出
1 2 2 3 3 3 4 4 4 4
那么结果就远远不止1种全是0的了。至少有以下16种:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 4 4 4 4
0 0 0 3 3 3 0 0 0 0
0 0 0 3 3 3 4 4 4 4
0 2 2 0 0 0 0 0 0 0
0 2 2 0 0 0 4 4 4 4
0 2 2 3 3 3 0 0 0 0
0 2 2 3 3 3 4 4 4 4
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 4 4 4 4
1 0 0 3 3 3 0 0 0 0
1 0 0 3 3 3 4 4 4 4
1 2 2 0 0 0 0 0 0 0
1 2 2 0 0 0 4 4 4 4
1 2 2 3 3 3 0 0 0 0
1 2 2 3 3 3 4 4 4 4
5楼 zyfo2 2013-02-12 05:32发表[回复]
brute force is an easier way to do it if you can't think of these in a short time
4楼 oqqDuan1 2012-09-21 17:45发表[回复]
0 1 2 3 4 5 6 7 8 9
8 1 0 0 0 0 0 0 0 0
先控制高位,如 9 8 7 这些,然后慢慢调整小位,没有其他办法,只能缩小范围
Re: taiyangads1 2012-10-05 16:30发表[回复]
回复oqqDuan1:这个不对吧?8在下面一行还出现了1次呢?
3楼 qllillp001 2012-07-26 17:37发表[回复]
分析中第三条是怎么得来的?
2楼 方寸之间 2011-08-31 17:58发表[回复]
你说的不错,这是一种情况,不违反题意。
1楼 coolria 2011-08-28 18:11发表[回复]
如果上排的数字没有0 比如 1,2 3,4,5
那么 0,0,0,0,0 总是解
所以这题题目没说清楚
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
中位数
高一数学集合间的基本关系达标训练题
计算某一区间数的个数的函数
数学必修1——集合
JAVA排序汇总
详解冒泡排序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服