在线性代数里有这么一个概念:有一个数列,如21543,
1的前面有1个数比它要大,4的前面有1个数比它大,
3的前面有2个数比它大,总数是1+1+2=4
所以21543的逆序数就是4
输入
多组测试数据,第一行是n(1<=n<=1e7),下一行是一个长度为n的字符串
输出
算出这个字符串的逆序数(ASCII比较)
样例输入
5
21543
3
123
6
654321
4
acdb
6
abcABC
4
2211
样例输出
4
0
15
2
9
4
难度:☆
代码实现如下:
1
#include
<
iostream
>
2 using namespace std;
3 int main( void )
4 {
5 int i,n,Sum;
6 while (cin >> n)
7 {
8 cin. get (); // 为什么呢?
9 Sum = 0 ;
10 char * str = new char [n];
11 for (i = 0 ;i < n;i ++ )
12 {
13 int j;
14 cin. get (str[i]); // 与str[i] = cin.get()相同效果
15 for (j = 0 ;j < i;j ++ )
16 {
17 if (str[j] > str[i])
18 {
19 Sum ++ ;
20 }
21 }
22 }
23 cout << Sum << endl;
24 delete [] str;
25 }
26 return 0 ;
27 }
2 using namespace std;
3 int main( void )
4 {
5 int i,n,Sum;
6 while (cin >> n)
7 {
8 cin. get (); // 为什么呢?
9 Sum = 0 ;
10 char * str = new char [n];
11 for (i = 0 ;i < n;i ++ )
12 {
13 int j;
14 cin. get (str[i]); // 与str[i] = cin.get()相同效果
15 for (j = 0 ;j < i;j ++ )
16 {
17 if (str[j] > str[i])
18 {
19 Sum ++ ;
20 }
21 }
22 }
23 cout << Sum << endl;
24 delete [] str;
25 }
26 return 0 ;
27 }
点评:主要使用了一个函数cin.get(),以前还真没有接触过。它的主要特点是保留回车在输入流队列中,输入A,会按A 回车,cin.get()会把回车('\n')当作字符读了。所以在cin后,又加了一个cin.get().