http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=10594&courseid=4

本文探讨了在特定场景下如何通过最小交换次数实现学生按身高排序的问题,详细介绍了排序算法的应用与优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 新生排队

Problem description
  某班上现在有N个新生,按学号排队去操场做操,现在需要按身高M从低到高排队,只能相邻的两个交换,问排好这个队所有同学最少要多交换多少次才能排好?

Input
  有多组测试数据

 

第一行输入学生人数N0),即学号最大数

第二行按学号输入每个学生的身高M (假设单位:nm)0

N=0时不需处理

Output
  输出最少的交换次数即可,每组数据占一行

Sample Input
5
9 1 0 5 4
4
1 2 3 4
0
Sample Output
6
0
wrong solution:
//Runtime Error
#include<iostream>
using namespace std;
int a[100];
int main()
{
    int m,i,j,num,sum;
    while(scanf("%d",&m)!=EOF)
    {
                              if(m==0)
                              break;
                              for(i=0;i<m;i++)
                              scanf("%d",&a[i]);
                              sum=0;
                              while(1){
                              i=0;j=1;
                              num=0;
                              while(j<m){
                              if(a[i]>a[j]){
                              swap(a[i],a[j]);
                              //cout<<"i="<<i<<"j="<<j<<endl;
                              num++;
                              }
                              i++;j++;
                              }
                              sum+=num;
                              if(num==0)
                              break; 
                              }
                              printf("%d/n",sum);
                              }
                              system("pause");
                              return 0;
                             
    }
// look for help 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值