标题:翻煎饼问题(讨论,你有好的思路吗?类似的问题好像比尔盖茨解决过额!)
只看楼主
编程20123165
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2013-5-18
结帖率:100%
已结贴  问题点数:10 回复次数:3 
翻煎饼问题(讨论,你有好的思路吗?类似的问题好像比尔盖茨解决过额!)
Description
麦兜最喜欢的食物是煎饼,每次在街上看到煎饼摊的时候都会在那里停留几分钟。最吸引麦兜还是煎饼师傅那一手熟练的翻煎饼的技术,一堆煎饼在那里,师傅只需要用铲子翻几下,就让煎饼整齐的叠在了一起。 这天,为了庆祝麦兜被保送上研究生,他从煎饼师傅那里买回来一些煎饼请客。但是麦兜买回的煎饼大小不一,麦兜太想吃煎饼了,他想吃这些煎饼中最大的那个。麦兜还知道同学们也很喜欢煎饼,为了表示他的诚意,他想让同学们先吃,麦兜最后吃,因此,麦兜想把煎饼按照从小到大的顺序叠放在一起,大的在最下面。这样麦兜就可以在最后拿到最大的那一块煎饼了。 现在请你帮助麦兜用煎饼师傅翻煎饼的方法把麦兜买的煎饼从小到大的叠在一起。煎饼师傅的方法是用铲子插入两块煎饼之间,然后将铲子上的煎饼翻一转,这样铲子上第一个煎饼就被翻到了顶上,而原来顶上的煎饼则被翻到了刚才插入铲子的地方。麦兜希望这样翻煎饼的次数最少。
 Input
输入包括两行,第一行是一个整数n(1<=n<=1000),表示煎饼的个数,接下来的一行有n个不相同的整数,整数间用空格隔开,每个整数表示煎饼的大小(直径),左边表示顶部,右边表示底部。
 Output
输出为一行,翻煎饼的最少次数
 
Sample Input
5
5 4 2 3 1
Sample Output
4
搜索更多相关主题的帖子: 技术 煎饼 最大的 研究生 比尔盖茨 
2013-06-06 10:40
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
得分:7 
有点感觉像递归啊

[ 本帖最后由 lzj12530 于 2013-6-6 14:27 编辑 ]

C++菜鸟
2013-06-06 14:21
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
得分:0 
#include<iostream>
using namespace std;
void sort(int a[],int size);
int search(int a[],int key,int size);
void change(int array[],int a[],int l);
void swan(int a[],int i);
int main()
{
    int *b,*c,*d;
    int n,i;
    cout<<"please input the size of array."<<endl;
    cin>>n;
    b=new int [n];
    c=new int[n];
    cout<<"please input the member of array."<<endl;
    for(i=0;i<n;i++)
    {
        cin>>b[i];
        c[i]=b[i];
    }   
    sort(c,n);
    change(b,c,n);
    for(i=0;i<n;i++)
    {
        cout<<b[i];
    }
    cout<<endl;
    return 0;
}
void sort(int a[],int size)
{
    int i,j;
    int temp;
    for(i=0;i<size;i++)
    {
        for(j=0;j<size-i;j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
}
int search(int a[],int key,int size)
{
    for(int i=0;i<size;i++)
    {
        if(a[i]=key)
            return i;
    }   
}
void change(int array[],int a[],int l)
{
    int i;
    if(array[l]!=a[l]&&array[0]!=a[l])
    {
        i=search(array,a[l],l);
        swan(array,i);
        swan(array,l);
        change(array,a,l-1);
    }
    if(array[0]==a[l])
    {
        swan(array,l);
        change(array,a,l-1);
    }
    if(array[l]==a[l])   
        change(array,a,l-1);
}
void swan(int a[],int i)
{
    int temp,j;
    for(j=0;j<i-j;j++)
    {
        temp=a[j];
        a[j]=a[i-j];
        a[i-j]=temp;
    }
}

没完成,还在调试,贴出来一起思考思考

C++菜鸟
2013-06-07 10:12
编程20123165
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2013-5-18
得分:0 
#include<stdio.h>
int s[1000];
int  main()
{
    int i,n,k=0;
 scanf("%d",&n);
 for(i=0l;i<n;i++)
  scanf("%d",&s[i]);
   for(;n>1;n--)
   {
   int max=0,l=0;
    for(i=0;i<n;i++)
    { if(s[i]>max)
      {
        max=s[i];
     l=i;
        }
    }
             if(l==0)
           {
             k+=1;
                for(i=0;i<n/2;i++)
                {
                   int t=s[i];
              s[i]=s[n-1-i];
                s[n-1-i]=t;
                 }
  
          }
    else if(l<n-1)
             {
                   k+=2;
                   for(i=0;i<(l+1)/2;i++)
                  {
                      int t=s[i];
                   s[i]=s[l-i];
                    s[l-i]=t;
                  }
                     for(i=0;i<n/2;i++)
                      {
                          int t=s[i];
                      s[i]=s[n-1-i];
                        s[n-1-i]=t;
                      }
             }
     }
 
       printf("%d\n",k);
}
2013-06-08 10:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-414641-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.361951 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved