@[七星玖月](/user/490745)
```cpp
#include<bits/stdc++.h>
using namespace std;
int a[10001];
int main()
{
int i,j,t,n,ans=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
if(a[i]>a[j])
{
t=a[i];a[i]=a[j];a[j]=t;
ans++;
}
}
cout<<ans;
return 0;
}
```
改了改(试过了,AC),自己对比一下,看看问题(我觉得你可能对冒泡有误解,建议再看看)
by Andysun06 @ 2021-08-11 11:02:29
@[Andysun06](/user/70299)
哦哦知道了谢谢大佬
by 七星玖月 @ 2021-08-11 11:07:39
@[Andysun06](/user/70299) 可是我自己试了试那个例题我原本的代码没错啊,至少提交上去的时候不能是零分吧。。。。。
by 七星玖月 @ 2021-08-11 11:12:03
@[七星玖月](/user/490745) 样例过了提交0分是常态 ~~(出题人不可能把能够卡你的数据放在样例)~~ ,样例往往都是最简单的(
by Andysun06 @ 2021-08-11 11:14:41
@[Andysun06](/user/70299) 哎
好吧 主要是我的思路跟书上一模一样啊 服了 啊啊啊啊啊啊啊啊啊
by 七星玖月 @ 2021-08-11 11:17:23
@[Andysun06](/user/70299) (尴尬)抱歉啊我自己把代码打错了
一个不小心把等号打成加号了。。。
by 七星玖月 @ 2021-08-11 11:22:44
朋友,我给你详细的分析一下这道题:
先看样例,输入N、代表的是车厢的长度,这个样例给的是4,顺序是4,3,2,1,再进行下步分析:
我们需要的顺序是从小到大的,也就是1,2,3,4,而非4,3,2,1等。那么我们先看位于正确排序(即1,2,3,4)的第一位的数字:“1”,此时我们希望位于现给出顺序(即4,3,2,1)的第四位的1挪到第一位,那么就需要和其他位进行交换:
第一次:1,2交换:4,3,1,2
第二次:1,3交换:4,1,3,2
第三次:1,4交换:1,4,3,2
(看规律:1的原有位置是第四位,至第一位共交换了3次,则次数是:数的位置减数的值,例如4-1=3)
这十分明显,可以用贪心进行编程,剩下的就只是看目标数的位置-1即可
所以此题十分简单,样例也就说得过去了:
移1: 4-1=3;
移2: 4-2=2;
移3: 4-3=1;
移4: 4-4=0;
总共加起来是3+2+1=6.
tips:学霸题,数正方体,3+2+1,全部加起来,你学会了吗... :)
十分简单。 所以说要先将题吃透,再进行编程 :)
by Danny0907 @ 2022-01-21 12:40:54