第一题:副对角线交换(100分)
问题描述
将一个n*n矩阵元素根据副对角线交换。
输入描述
第一行输入一个整数n表示矩阵的大小,接下来输入n行,每行有n个整数(1 <= n <= 100)。
输出描述
输出根据副对角线交换后的n*n矩阵,输出格式如下:
输出n行,每行输出n个整数。每两个整数之间都有一个空格,记住,每行最后一个整数后面没有空格。
输入样例
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出样例
16 12 8 4
15 11 7 3
14 10 6 2
13 9 5 1
#include<iostream>
using namespace std;
int main() {
int n, arr[100][100];
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
int a, b;
for (a = n - 1; a >= 0; a--) {
for (b = n - 1; b > 0; b--) {
cout << arr[b][a] << " ";
}
cout << arr[b][a];
cout << endl;
}
return 0;
}
第二题:字符串及其逆序数按逆序数升序输出
问题描述
在一个字符串中,如果存在i<j,且a[i]>a[j],则称a[i]和a[j]构成一个逆序。例如"DAABEC"的逆序是5,其中D与A、A、B、C构成4个逆序,E与C构成1个逆序。输入若干个字符串,将按各串及其逆序数按逆序数升序输出。
编程要求:
编写函数:int getRev(char a[]),计算并返回字符串a的逆序。
编写函数:void sort(char a[][100], int b[], int
n),根据b中保存的每个字符串的逆序数,将n行的二维数组a按逆序数升序排序。在main中先输入n(1<=n<=20),然后输入n个字符串,每个串不多于99个字符,先计算通过调用getRev将各串的逆序数依次存入一个整型数组中,再调用sort排序后,将按各串及其逆序数按逆序数升序输出。
输入描述
先输入n(1<=n<=20),然后输入n个字符串,每个串不多于99个字符
输出描述
按逆序数升序依次输出字符串及其逆序数,字符串和逆序数之间用空格分隔,一个字符串的信息占一行。注意逆序数后不要有多余的空格。
输入样例
5
asdf
er
hjkf
rtj
tyu
输出样例
er 0
tyu 1
asdf 2
rtj 2
hjkf 3
#include<iostream>
#include<cstring>
using namespace std;
int getRev(char a[]) {
int num = 0;
for (int i = 0; a[i] != 0; i++) {
for (int j = i; a[j] != 0; j++) {
if (a[i] > a[j]) num++;
}
}
return num;
}
void sort(char a[][100], int b[], int n) {
//将a中的每一个逆序数输入到b数组
for (int i = 0; i < n; i++) {
b[i] = getRev(a[i]);
}
//冒泡排序
for (int j = 0; j < n - 1; j++) {
for (int k = 0; k < n - 1 - j; k++) {
if (b[k] > b[k + 1]) {
//交换b数组中的数
int temp01 = b[k + 1];
b[k + 1] = b[k];
b[k] = temp01;
char temp02[100];
strcpy(temp02, a[k + 1]);
strcpy(a[k + 1], a[k]);
strcpy(a[k], temp02);
}
}
}
/*错误的冒泡排序
for (int j = 0; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
if (b[j] > b[k]) {
//交换b数组中的数
int temp01 = b[k];
b[k] = b[j];
b[j] = temp01;
char temp02[100];
strcpy(temp02, a[k]);
strcpy(a[k], a[j]);
strcpy(a[j], temp02);
}
}
}*/
}
int main() {
char a[20][100];
int n, b[100];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, b, n);
//输出
for (int j = 0; j < n - 1; j++) {
//输出字符串
cout << a[j] << " " << b[j] << endl;
}
cout << a[n - 1] << " " << b[n - 1];
system("pause");
return 0;
}