Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	for scanner.Scan() {
		n, _ := strconv.Atoi(scanner.Text())
		if n == 0 {
			break
		}
		arr := make([]int, n)
		for i := 0; i < n; i++ {
			scanner.Scan()
			arr[i], _ = strconv.Atoi(scanner.Text())
		}
		cnt := 0
		for i := n-1; i  > 0; i-- {
			for j := 0; j < i; j++ {
				if arr[j] > arr[j+1] {
					// log.Println(arr)
					cnt++
					arr[j], arr[j+1] = arr[j+1], arr[j]
				}
			}
		}
		// log.Println(arr)
		fmt.Println(cnt)
	}
}

C++: #include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <numeric>
#include <bitset>
#include <cmath>

static const int MOD = 1000000007;
using ll = long long;
using u32 = unsigned;
using u64 = unsigned long long;
using namespace std;

template<class T> constexpr T INF = ::numeric_limits<T>::max()/32*15+208;

int main() {
    int n;
    while(cin >> n, n){
        vector<int> v(n);
        for (auto &&i : v) scanf("%d", &i);
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            for (int j = i+1; j < n; ++j) {
                if(v[i] > v[j]) ans++;
            }
        }
        cout << ans << "\n";
    }
    return 0;
}

C++: #include<iostream>
#define MAX_N 1000000
using namespace std;

int bit[MAX_N + 1],n;

int sum(int);
void add(int,int);

int main(void){
  
  while(cin >> n,n){
    int ans=0,a[MAX_N + 1];

    for(int i=0;i<1000;i++)bit[i]=0;
    for(int i=0;i<n;i++)cin >> a[i];
    
    for(int j=0;j<n;j++){
      ans += j - sum(a[j]);
      add(a[j],1);
    }
    printf("%d\n",ans);
  }
}

int sum(int i){
  int s=0;
  while(i > 0){
    s += bit[i];
    i -= i & -i;
  }
  return s;
}

void add(int i,int x){
  while(i <= n){
    bit[i] += x;
    i += i & -i;
  }
}

C++: #include<iostream>
#define MAX_N 1000000
using namespace std;

int bit[MAX_N + 1],a[MAX_N + 1],n;

int sum(int);
void add(int,int);

int main(void){
  
  while(cin >> n,n){
    int ans=0;
    for(int i=0;i<n;i++)cin >> a[i];
    
    for(int j=0;j<n;j++){
      ans += j - sum(a[j]);
      add(a[j],1);
    }
    printf("%d\n",ans);
  }
}

int sum(int i){
  int s=0;
  while(i > 0){
    s += bit[i];
    i -= i & -i;
  }
  return s;
}

C++: #include <stdio.h>
int main() {int RB[105],N,i,j,ans;while (1) {scanf("%d",&N);if (!N) return 0;for (i=0;i<N;scanf("%d",&RB[i++]));for (i=1,ans=0;i<N;i++) for (j=N-1;j>=i;j--) if (RB[j-1]>RB[j]) ans++,RB[j]+=RB[j-1],RB[j-1]=RB[j]-RB[j-1],RB[j]-=RB[j-1];printf("%d\n",ans);}}

C++: #include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<cctype>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<stack>
#include<queue>
#include<map>

using namespace std;
const int dx[] = {1,0,-1,0} , dy[] = {0,1,0,-1};
#define INF 999999
int main(){
    int n;
    while(scanf("%d",&n),n){
        int so[128]={0};
        for(int i = 0; i < n; i++)scanf("%d",&so[i]);

        int cnt = 0;
        for(int i = 0; i < n; i++){
            for(int j = i + 1; j < n; j++){
                if(so[i] > so[j]){
                    swap(so[i],so[j]);
                    cnt++;
                }
            }
        }
        printf("%d\n",cnt);
    }
	return 0;
}

C++: #include<iostream>
#define loop(i,a,b) for(int i=a;i<b;i++)
#define rep(i,a) loop(i,0,a)
using namespace std;

int main(){
	int n;
	while(cin>>n){
		if(n==0)break;
		int dt[n];
		rep(i,n){
			cin>>dt[i];
		}
		int cnt=0;
		while(1){
			if(n==1)break;
			rep(i,n-1){
				if(dt[i]>dt[i+1]){
					int alt=dt[i];
					dt[i]=dt[i+1];
					dt[i+1]=alt;
					cnt++;
				}
			}
			n--;
		}
		cout<<cnt<<endl;
	}
	return 0;
}

C++: #include<bits/stdc++.h>
#define rep(i,n)for(int i=0;i<n;i++)
using namespace std;
typedef long long ll;

int a[100];
int main() {
	int n;
	while (cin >> n, n) {
		rep(i, n)scanf("%d", &a[i]);
		int cnt = 0;
		bool flag = true;
		for (int i = 0; flag; i++) {
			flag = false;
			for (int j = n - 1; j >= i + 1; j--) {
				if (a[j] < a[j - 1]) {
					swap(a[j], a[j - 1]);
					flag = true;
					cnt++;
				}
			}
		}
		cout << cnt << endl;
	}
}

C++: #include <iostream>
#include <algorithm>
#include <cassert>
using namespace std;

int N, A[100+10];

int W[100+10];

// 半開区間[l,r)の範囲A[l]からA[r-1]を整列すると同時に、区間内の逆転するペアを返す。
int merge_and_count(int l,int r) {
  if (l+1 >= r) {
    return 0; // emptyまたは1個しか要素がない。
  }
  if (l+2 == r) { // A[l]とA[l+1]の2つしか要素がない。
    if (A[l] <= A[l+1]) {
      return 0;
    } else {
      swap(A[l],A[l+1]);
      return 1;
    }
  }
  int m = (l+r)/2;
  int cl = merge_and_count(l,m);
  int cr = merge_and_count(m,r);
  int c = 0; // 右と左を混ぜて逆転数を数える。
  // 答えは cl + cr + c である。
  int i=l, j=m; // i \in [l,m) , j \in [m,r)
  int k=l; // 小さいものからW[k]に書き込む。
  while (i < m && j < r) {
    if (A[i] <= A[j]) {
      W[k] = A[i];
      k++;
      i++;
    } else {
      W[k] = A[j];
      k++;
      j++;
      c += m-i;
    }
  } 
  while (i<m) {
    W[k++] = A[i++];
  }
  while (j<r) {
    W[k++] = A[j++];
  }
  assert (k == r);
  /* assert は 真なら以下の行を実行し、そうでなければそこでストップする関数。デバグにつかう。この段階ではk==rじゃなきゃおかしい。 */
  copy(W+l,W+r,A+l); // W[l]からW[r-1]を、A[l]を起点にしてコピーしていく。
  // 結論としては、A[l]からA[r-1]をソートしたことになる。
  return cl + cr + c;
}

int main() {  
  while (scanf("%d",&N) && N > 0) {
    for (int i=0;i<N;i++) {
      scanf("%d",&A[i]);
    }
    printf("%d\n",merge_and_count(0,N));
  }
}

C++: /*Bubble Sort*/
/*This program uses the tree structure(Binary Indexed Tree).
We can calculate nuber of exchanges for O(log n)
total order of this program is O(n log n) because of sort(quick sort)*/
#include <cstdio>
#include <algorithm>
using namespace std;

typedef long long Int;
#define SIZE 100001
int bit[SIZE];

int n;

int sum(int i) {
	int res = 0;
	for (int x = i;x > 0;x -= x&-x) {
		res += bit[x];
	}
	return res;
}

void add(int i, int r) {
	for (int x = i;x <= n;x += x&-x)bit[x] += r;
}

int main() {
	int a[SIZE];
	int b[SIZE];
	int lb, ub, mid;
	Int res;

	while (true) {
		scanf("%d", &n);
		if (n == 0)break;
		for (int i = 0;i < n;i++) {
			scanf("%d", &a[i]);
		}

		for (int i = 0;i < n;i++) {
			b[i] = a[i];
		}
		sort(b, b + n);
		for (int i = 0;i < n;i++) {//change a[i] to k(a[i] is k.th largest of the array)
			lb = -1;ub = n;
			while (ub - lb > 1) {
				mid = (ub + lb) / 2;
				if (a[i] > b[mid]) {
					lb = mid;
				}
				else {
					ub = mid;
				}
			}
			a[i] = ub + 1;
		}
		for (int i = 0;i <= n;i++) {
			bit[i] = 0;
		}
		res = 0;
		for (int i = 0;i < n;i++) {
			res += i - sum(a[i]);
			add(a[i], 1);
		}
		printf("%lld\n", res);
	}

	return 0;
}

C++: #include <bits/stdc++.h>
#define ll long long
#define INF 999999999
#define MOD 1000000007
#define rep(i,n) for(int i=0;i<n;i++)

using namespace std;

typedef pair<int,int>P;

const int MAX_N = 100;

int a[MAX_N];
int k[MAX_N];
int bit[MAX_N+1],n;
map<int,int> mp;

//i???????????§??????????¨??????????(i???1????????????)
int sum(int i)
{
	int s = 0;
	while(i>0){
		s += bit[i];
		i -= i & -i;
	}
	return s;
}
//i???????????????x????????????(i???1????????????)
void add(int i,int x)
{
	while(i <= n){
		bit[i] += x;
		i += i & -i;
	}
}

int main()
{
	while(1){
	cin >> n;
	if(n==0){
		break;
	}
	rep(i,n){
		scanf("%d",&a[i]);
		k[i] = a[i];
		mp[a[i]] = i;
	}
	sort(a,a+n);
	rep(i,n){
		k[mp[a[i]]] = i+1;
	}
	fill(bit,bit+n+1,0);
	ll ans = 0;
	rep(j,n){
		ans += j - sum(k[j]);
		add(k[j],1);
	}
	printf("%lld\n",ans);
	}
	return 0;
}

C++: #include <iostream>

#define reep(i,n,m) for(int i=(n);i<(m);i++)
#define rep(i,n) reep(i,0,n)

using namespace std;

int main(){
    int n;
    while(cin>>n,n){
        int a[101]={0};
        rep(i,n){
            cin >> a[i];
        }

        int ans=0;
        rep(i,n){
            rep(i,n-1){
                if(a[i]>a[i+1]){
                    swap(a[i],a[i+1]);
                    ans++;
                }
            }
        }

        cout << ans << endl;
    }
    return 0;
}