c语言煎饼问题算法,C煎饼分类程序?
此C程序在整數數組上實現Pancake Sort。
煎餅分類是分類問題的一種變體,其中唯一允許的操作是反轉序列中某些前綴的元素。
煎餅分類是一個數學問題的通俗術語,即按照煎餅的大小順序對一堆無序的煎餅進行分類,這時可以在煎餅堆中的任何一點插入一個鍋鏟,然后用它把所有的煎餅翻過來。煎餅數是給定數量的煎餅所需的最小翻轉次數Input:5,3,2,1,4
Output:1?2?3?4?5
說明
它是排序問題的一種變體,在排序問題中,唯一允許的操作是反轉序列中某些前綴的元素。與傳統的排序算法不同,傳統排序算法試圖用盡可能少的比較進行排序,其目標是盡可能少地對序列進行反向排序。這個問題的另一個變體與燒焦的煎餅有關,每個煎餅都有一個燒焦的一面,而且所有的煎餅都必須以燒焦的一面在底部結束。
示例#include?
using?namespace?std;
void?do_flip(int?*,?int,?int);
int?pancake_sort(int?*list,?unsigned?int?length)?{
if?(length?
return?0;
int?i,?a,?max_num_pos,?moves;
moves?=?0;
for?(i?=?length;i?>?1;i--)?{
max_num_pos?=?0;
for?(a?=?0;a?
if?(list[a]?>?list[max_num_pos])
max_num_pos?=?a;
}
if?(max_num_pos?==?i?-?1)
continue;
if?(max_num_pos){
moves++;
do_flip(list,?length,?max_num_pos?+?1);
}
do_flip(list,?length,?i);
}
return?moves;
}
void?do_flip(int?*list,?int?length,?int?num)?{
int?swap;
int?i?=?0;
for?(i=0;i?
swap?=?list[i];
list[i]?=?list[num];
list[num]?=?swap;
}
}
int?main(int?argc,?char?**argv)?{
int?arr[]={5,3,2,1,4};
int?n=5;
int?moves=pancake_sort(arr,?n);
for?(int?i?=?0;i?
printf("%d?",?arr[i]);
}
printf("?-?with?a?total?of?%d?moves\n",?moves);
}
總結
以上是生活随笔為你收集整理的c语言煎饼问题算法,C煎饼分类程序?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新款丰田汉兰达燃油版发布:搭载进口TNG
- 下一篇: 最大化_怎样保证油压缓冲器工作效率最大化