没法过呀求帮忙

P1116 车厢重组

@[七星玖月](/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


|