麻烦各位大佬帮忙看下
题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180180180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
输入格式
共两行。
第一行是车厢总数 N(≤10000)N( \le 10000)N(≤10000)。
第二行是 NNN 个不同的数表示初始的车厢顺序。
输出格式
一个整数,最少的旋转次数。
输入输出样例
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a,i,j,t,count=0;
for(i=0;i<n;i++)scanf("%d",&a);
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(a>a){
//t=a;
//a=a;
//a=t;
count++;
}
printf("%d\n",count);
return 0;
}
我写的代码,加上排序的过程就能输出正确结果,如果不加结果就不正确
比如3 1 2 4 和 2 1 3 4都输出3 本帖最后由 jhq999 于 2022-12-1 10:35 编辑
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a,i,j,t,count=0,flag=1;
for(i=0; i<n; i++)scanf("%d",&a);
for(i=0; i<n-1; i++)
{
flag=1;
for(j=0; j<n-i-1; j++)
{
if(a>a)
{
t=a;
a=a;
a=t;
flag=0;
count++;
}
}
if(flag)break;
}
for(i=0; i<n; i++)printf("%d",a);
printf("\n%d\n",count);
return 0;
}
4
3 1 2 4
1234
2
Process returned 0 (0x0) execution time : 11.623 s
Press any key to continue.
4
2 1 3 4
1234
1
Process returned 0 (0x0) execution time : 3.141 s
Press any key to continue.
jhq999 发表于 2022-12-1 10:31
我只想知道我那个有什么问题 本帖最后由 jhq999 于 2022-12-1 11:03 编辑
basketmn 发表于 2022-12-1 10:46
我只想知道我那个有什么问题
你把符合条件互换注释掉了
本质就是冒泡 jhq999 发表于 2022-12-1 11:02
你把符合条件互换注释掉了
本质就是冒泡
不要交换的结果,只要次数
我感觉跟这个没关系 本帖最后由 basketmn 于 2022-12-1 11:37 编辑
我想明白了,感谢大佬
光判断条件,但数列本身不会变,所以结果不对
页:
[1]