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

1874 ワード

新入生が並ぶ
Problem description
  あるクラスの上で今N人の新入生がいて、学号によって列に並んで運動場に行って体操をして、今身長Mによって低いから高いまで列に並ぶ必要があって、隣接する2つの交換しかできなくて、この列に並んですべての学生に少なくとも何回交換して並ぶことができますか?
Input
  複数組のテストデータ  1行目に生徒数N(0)が入力され、すなわち、学番最大数2行目に生徒毎の身長M(仮単位:nm)(0)が学番で入力され、N=0の場合は処理を必要としない
Output
  最も少ない交換回数を出力すれば、データのセットごとに1行を占めることができます.
Sample Input
5
9 1 0 5 4
4
1 2 3 4
0

Sample Output
6
0
wrong solution:
//Runtime Error
#include
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                              scanf("%d",&a[i]);
                              sum=0;
                              while(1){
                              i=0;j=1;
                              num=0;
                              while(j                              if(a[i]>a[j]){
                              swap(a[i],a[j]);
                              //cout<                              num++;
                              }
                              i++;j++;
                              }
                              sum+=num;
                              if(num==0)
                              break; 
                              }
                              printf("%d/n",sum);
                              }
                              system("pause");
                              return 0;
                             
    }
// look for help