问题标题: 酷町堂:3245

0
0
已解决
汪恺恒
汪恺恒
中级启示者
中级启示者

题目描述 Description

现在购买火车票有很多方式,可以网上买,电话买,到购票大厅买。可是在2000年的时候,人们只能去火车站排队买票,为了能买到票,需要在售票窗口排很长很长的队伍。有一天晚上,在车站大厅值班的李站长发现排队中有不少老人,本着尊老爱幼的思想,站长组织共排队人员给老人家让让位置,让排在后面的老人和排在年轻人前面。他让因为当天只有他一个人值班,所以每次给一个老人调换位置。问需要至少调整多少次位置,才能让整个队伍的老年人全部排在前面。(老年人的年龄要不低于60岁)

输入描述 Input Description

两行:
第一行:一个数字n,表示现在排队的人数;(5<=n<=30)
第二行:排队的每个人的年龄,用空格隔开;(年龄范围在20-70之间)

输出描述 Output Description

调整的次数

 

这个每日一题............

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
using namespace std;
int n,a[100],cnt;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(a[j]>a[i]){
                swap(a[i],a[j]);
                cnt++;
            }
        }
    }
    cout<<cnt;
    return 0;
}

样例都没过

求思路+核心

@周琪岳 @崔竣恺


0
已采纳
周琪岳
周琪岳
资深光能
资深光能

等一下,要采纳采纳大号

0
0
周琪岳
周琪岳
初级守护
初级守护

选择排序优化呀,因为一次双重循环里可能会cnt++多次

选择排序优化:

 

选择排序代码实现(不违反版规,提交WA):

#include<iostream> using namespace std; int a[10000],n,i,j,t; int main() { cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n-1;i++) //依次确定a[1]~a[n-1]的值 { int pos=i; //pos用来记录最小值的下标 for(j=i+1;j<=n;j++) { if(a[j]<a[pos]) //如果后面有元素a[j]比已有的最小值a[pos]小 { pos=j; //就把pos更新为下标j } } swap(a[i],a[pos]); //将a[i]与最小值交换位置 } for(i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }

0
李显晨
李显晨
中级启示者
中级启示者
for(i=1;i<=n-1;i++){
        int pos=i; 
        for(j=i+1;j<=n;j++) { 
            if(a[pos]<a[j]&&a[j]>60) { 
                pos=j; 
                cnt++;
            }
            swap(a[i],a[pos]);
        } 
    }

选排优化,样例是对的,是10分

0
我要回答