| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3187 人关注过本帖
标题:一固定数列如何翻转,让其按一定顺序排列,且翻转次数最少。
取消只看楼主 加入收藏
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
结帖率:93.33%
收藏
已结贴  问题点数:50 回复次数:4 
一固定数列如何翻转,让其按一定顺序排列,且翻转次数最少。
固定数列为:10 5 6 2 1 8 9 3 4 7(数列项数为N)
翻转规则:可以从前面几个数翻转,也可以从后面几个数翻转,但是不能从中间翻转。
           比如就以上面的数列为例。可以从前面几个数翻转(到底翻转几个数,可以自己定,2个可以,3个也可以,最多翻转个数为N-1,这里N=10)关键是如何翻转,比如:
           从前面2个数翻转,指的是:将数列里的10和5翻转,翻转后就是5 10.数组变成了5 10 6 2 1 8 9 3 4 7
           从前面3个数翻转,指的是:将数列里的10 5 6 翻转,翻转后就是6 5 10.数组变成了6 5 10 2 1 8 9 3 4 7
           从前面4个数翻转,指的是:将数列里的10 5 6 2 翻转,翻转后就是2 6 5 10.数组变成了2 6 5 10 1 8 9 3 4 7
           从前面5个数翻转,指的是:将数列里的10 5 6 2 1 翻转,翻转后就是1 2 6 5 10.数组变成了1 2 6 5 10 8 9 3 4 7
           .。。。。。
          从后面2个数翻转,指的是:将数列里的4和7翻转,翻转后就是7 4.数组变成了10 5 6 2 1 8 9 3 7 4
          从后面3个数翻转,指的是:将数列里的3 4 7翻转,翻转后就是7 4.3数组变成了10 5 6 2 1 8 9 7 4 3
          从后面4个数翻转,指的是:将数列里的9 3 4 7翻转,翻转后就是7 4.3 9数组变成了10 5 6 2 1 8 7 4 3 9
          从后面5个数翻转,指的是:将数列里的8 9 3 4 7翻转,翻转后就是7 4.3 9 8数组变成了10 5 6 2 1 7 4 3 9 8
         .。。。。。
         但是不能从数列中间选择数来翻转,比如我要翻转2 1 8 这是不行的。
         还有就是可以混合翻转,也就是根据数列的具体情况,可以从前面的几个数翻转,也可以再从后面的几个数翻转,交叉翻转。这是要根据数列的具体情况而定。
         翻转到最后,数列要按顺序排列(从小到大或从大到小)。最后要计算的是按顺序排列后,总共翻转了多少次。要求就是这个次数要尽量是最少次数。
题目延伸:由10个数组成的全排列,那又该怎么计算这个翻转次数呢?
搜索更多相关主题的帖子: 数列 排列 次数 个数 数组 
2018-05-26 21:35
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
0:10 5 6 2 1 8 9 3 4 7
1:1 2 6 5 10 8 9 3 4 7
2:1 2 6 5 10 8 9 7 4 3
3:1 2 3 4 7 9 8 10 5 6
4:1 2 3 4 7 9 8 10 6 5
5:1 2 3 4 5 6 10 8 9 7
6:1 2 3 4 5 6 7 9 8 10
7:1 2 3 4 5 6 7 10 8 9
8:1 2 3 4 5 6 7 10 9 8
9:1 2 3 4 5 6 7 8 9 10
共9步完成。
2018-05-27 07:37
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
现在的问题是,对于这个数列,9步是不是最少次数的。
2018-05-27 07:42
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
请问怎么用编程来查找呢?
2018-05-27 16:43
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
到目前为止,写到这里来了。
程序代码:
#include<stdio.h>  
#include<stdlib.h>  
#include<time.h>  
int main()  
{  
    int a[10]={10,5,6,2,1,8,9,3,7,4};  
    int i,t;  
    int max=0;//最大元素的下标  
    int min=0;  
    printf("数组:");  
    for(i=0;i<10;i++)  
                printf("%d ",a[i]); 
     printf("\n");              
    for(i=1;i<10;i++)
    {  
        if(a[max]<a[i])
           max=i;
        if(a[min]>a[i])
           min=i;
  }  
    printf("最大元素a[%d]=%d\n",max,a[max]);     
    printf("最小元素a[%d]=%d\n",min,a[min]);
    printf("第一步变换: ");
    if(min!=0)
      {  if(a[min-1]==a[min]+1)
            {
                       t=a[0];
                      a[0]=a[min];
                      a[min]=t;
                      t=a[1];
                      a[1]=a[min-1];
                      a[min-1]=t;
           }
          for(i=0;i<10;i++)  
            printf("%d ",a[i]);
      }
} 
2018-05-27 22:12
快速回复:一固定数列如何翻转,让其按一定顺序排列,且翻转次数最少。
数据加载中...
 
   



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

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