贪心算法-均分纸牌-JAVA
创始人
2024-02-12 14:10:51
0

[均分纸牌]有N堆纸牌,编号分别为1,2,…,n。每堆上有若干张,但纸牌总数必为n的倍数.可以在任一堆上取若干张纸牌,然后移动。移牌的规则为:在编号为1上取的纸牌,只能移到编号为2的堆上;在编号为n的堆上取的纸牌,只能移到编号为n-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。例如:n=4,4堆纸牌分别为:① 9 ② 8 ③ 17 ④ 6 移动三次可以达到目的:从③取4张牌放到④ 再从③区3张放到②然后从②去1张放到①。

输入输出样例:4

9 8 17 6

屏幕显示:3

算法分析:设a[i]为第I堆纸牌的张数(0<=I<=n),v为均分后每堆纸牌的张数,s为最小移动次数。

我们用贪心算法,按照从左到右的顺序移动纸牌。如第I堆的纸牌数不等于平均值,则移动一次(即s加1),分两种情况移动:

1.若a[i]>v,则将a[i]-v张从第I堆移动到第I+1堆;

2.若a[i]

为了设计的方便,我们把这两种情况统一看作是将a[i]-v从第I堆移动到第I+1堆,移动后有a[i]=v; a[I+1]=a[I+1]+a[i]-v.

在从第I+1堆取出纸牌补充第I堆的过程中可能回出现第I+1堆的纸牌小于零的情况。

如n=3,三堆指派数为1 2 27 ,这时v=10,为了使第一堆为10,要从第二堆移9张到第一堆,而第二堆只有2张可以移,这是不是意味着刚才使用贪心法是错误的呢?

我们继续按规则分析移牌过程,从第二堆移出9张到第一堆后,第一堆有10张,第二堆剩下-7张,在从第三堆移动17张到第二堆,刚好三堆纸牌都是10,最后结果是对的,我们在移动过程中,只是改变了移动的顺序,而移动次数不便,因此此题使用贪心法可行的。

没看算法分析的时候没想出来~ 逻辑能力太弱啊~  以后多做算法题!

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int[] card  = new int[N];int sum = 0;int count = 0;//移动次数int v = 0;//平均数for (int i = 0; i < N; i++) {card[i] = sc.nextInt();sum += card[i];}v = sum/N;for (int i = 0; i < card.length; i++) {if (card[i] - v != 0) {card[i+1] = card[i+1] + card[i] - v ;count++;}}System.out.println(count);}
}

相关内容

热门资讯

创益通:聘任张凯军先生为公司副... 证券日报网讯 7月8日晚间,创益通发布公告称,公司董事会同意聘任张凯军先生为公司副总经理、董事会秘书...
山东省公安厅党委书记调整 转自:长安街知事山东省公安厅网站“领导信息”栏目近日更新显示,夏凤俭已任山东省委政法委副书记、省公安...
个人创业做什么项目好 个人小本... 关注上方网络营销渠道,学百集网络营销课个人创业做什么项目好?推荐5个小本创业项目!个人创业做什么项目...
6月中国仓储指数为51% 来源:人民日报人民日报北京7月7日电(记者欧阳洁)记者从中国物流与采购联合会获悉:6月中国仓储指数为...
这种病夏天就诊量高40%,喝水... 据估算,高温环境下,一个成年人每天的出汗量可达1~2升。炎热的夏季,如果喝不够水,就可能受到“脱水”...
普通人小本创业 云纸偷偷告诉你... 在当前经济形势下,对于普通人来说,选择自主创业的风险比较大,所以说,创业项目的选择,确实是至关重要。...
ST东时:被债权人申请重整及预... 人民财讯7月8日电,ST东时(603377)7月8日晚间公告,公司于2025年7月8日收到北京市第一...
福建福州:明天全市停止所有教育... 福建省福州市教育局发布消息:受今年第4号台风“丹娜丝”影响,7月9日福州全市有暴雨到大暴雨,局部特大...
五大小本创业致富项目 五大小本... 随着经济的发展,越来越多人选择了创业,但创业者一定要看好市场和前景,选择好项目,这样才能让自己的创业...