㊀题目
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平 旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
【输入】
有两行数据,第一行是车厢总数N(不大于10000),第二行是N个不 同的数表示初始的车厢顺序。
【输出】
一个数据,是最少的旋转次数。
【输入样例】
4
4 3 2 1
【输出样例】
6
㊁讲解
1 算法
数据不大,直接冒泡排序
㊂代码展示
#include <cstdio>
int pd( int *n, int len )
{
int i = 0;
while( i < len-1 )
{
if( n[i] > n[i+1] ) return 0;
i++;
}
return 1;
}
int change( int *a, int *b )
{
int c = *a;
*a = *b;
*b = c;
}
int s_sort( int *n, int len )
{
int frequency = 0,
i = 0;
while( pd( n,len ) == 0 )
{
i = 0;
while( i < len-1 )
{
if( n[i] > n[i+1] )
{
change( &n[i], &n[i+1] );
frequency++;
}
i++;
}
}
return frequency;
}
int game()
{
int len;
scanf( "%d", &len );
int train[len];
int i = 0;
while( i < len )
{
scanf( "%d", &train[i] );
i++;
}
printf( "%d", s_sort( train, len ));
}
int main( int argc, char **argv )
{
game();
return 0;
}
㊃其他
1 更新
敬请期待
2 声明
请合理使用本文章中的代码,并仅供学习使用,所造成后果本人概不负责。代码欢迎在不篡改的情况下自由传播。
最后,感谢读者们的支持