您现在的位置是:主页 > news > 西安广告公司网站建设/站长工具的网址
西安广告公司网站建设/站长工具的网址
admin2025/6/3 0:45:09【news】
简介西安广告公司网站建设,站长工具的网址,江苏国税网站电子申报怎么做,湖南城乡建设厅网站麦兜最喜欢的食物是煎饼,每次在街上看到煎饼摊的时候都会在那里停留几分钟。最吸引麦兜还是煎饼师傅那一手熟练的翻煎饼的技术,一堆煎饼在那里,师傅只需要用铲子翻几下,就让煎饼整齐的叠在了一起。 这天,为了庆祝麦兜被…
西安广告公司网站建设,站长工具的网址,江苏国税网站电子申报怎么做,湖南城乡建设厅网站麦兜最喜欢的食物是煎饼,每次在街上看到煎饼摊的时候都会在那里停留几分钟。最吸引麦兜还是煎饼师傅那一手熟练的翻煎饼的技术,一堆煎饼在那里,师傅只需要用铲子翻几下,就让煎饼整齐的叠在了一起。 这天,为了庆祝麦兜被…
麦兜最喜欢的食物是煎饼,每次在街上看到煎饼摊的时候都会在那里停留几分钟。最吸引麦兜还是煎饼师傅那一手熟练的翻煎饼的技术,一堆煎饼在那里,师傅只需要用铲子翻几下,就让煎饼整齐的叠在了一起。 这天,为了庆祝麦兜被保送上研究生,他从煎饼师傅那里买回来一些煎饼请客。但是麦兜买回的煎饼大小不一,麦兜太想吃煎饼了,他想吃这些煎饼中最大的那个。麦兜还知道同学们也很喜欢煎饼,为了表示他的诚意,他想让同学们先吃,麦兜最后吃,因此,麦兜想把煎饼按照从小到大的顺序叠放在一起,大的在最下面。这样麦兜就可以在最后拿到最大的那一块煎饼了。 现在请你帮助麦兜用煎饼师傅翻煎饼的方法把麦兜买的煎饼从小到大的叠在一起。煎饼师傅的方法是用铲子插入两块煎饼之间,然后将铲子上的煎饼翻一转,这样铲子上第一个煎饼就被翻到了顶上,而原来顶上的煎饼则被翻到了刚才插入铲子的地方。麦兜希望这样翻煎饼的次数最少。
输入
输入包括两行,第一行是一个整数n(1<=n<=1000),表示煎饼的个数,接下来的一行有n个不相同的整数,整数间用空格隔开,每个整数表示煎饼的大小(直径),左边表示顶部,右边表示底部。
输出
输出为一行,翻煎饼的最少次数
样例输入
5
5 4 2 3 1
样例输出
4
问题分析:
需要将煎饼从小到大排列,又要次数最少。这实则是一个贪心问题。只需先找到最大的然后将其翻到首位,然后再翻转一次,就使其翻到底部了。然后再将需要翻的煎饼个数减少1.
#include<stdio.h>
int N,a[1001],i,j,time=0;
int maxnum=1;
int Max(int n)//找到最大值下标
{int max;//i为最大值下标,max为最大值max=a[1];i=1;for(j=1;j<=n;j++){if(a[j]>max){i=j;max=a[j];}}return i;
}void ChangeWay(int m,int M)//m为煎饼位置对换的首位,M为煎饼对换的末尾
{//如m=1,M=5;需要对换的序列为012345,对换后054321 这里序列只是为了方便理解,并没有按照题中要求举例。int t;while(m<M){t=a[m];a[m]=a[M];a[M]=t;m++;M--;}
}void Change(int n)//决定翻得位置
{if(n!=1){maxnum=Max(n);if(maxnum==1)//如果最大元素在首位,直接将它翻到最后。{ChangeWay(1,n);time++;}else if(maxnum!=n)//如果较大元素不在最后。{ChangeWay(1,maxnum);//将较大元素排到首位ChangeWay(1,n);//将较大元素排到最后time+=2;}Change(n-1);}else if(n==1){return;}
}
int main()
{scanf("%d",&N);for(i=1;i<=N;i++){scanf("%d",&a[i]);}Change(N);printf("%d\n",time);return 0;
}