POJ1007

xiaoxiao2021-02-28  49

这道题就是对所输入的字符串按照他题目的要求——从左到右每一个字符与它后面的字符相比较大小即逆序数,看哪一个字符串逆序数大,然后再用任意排序方法(我用的最简单的冒泡排序),排序后对其进行输出。在这道题中我用的是二维数组来记录数据并进行比较,后来在快编程完的时候遇到一些问题,突然发现可以结构体(因为结构体可以避免我的问题),二而且结构体代码更简洁,更简单,也不容易出错,没那么多的弯,写完才发现二维数组的方法比结构体复杂的不是一点两点,所以建议还是用结构体写。

#include <iostream>//二维数组没有写出结构体再设置数组简单; #include <string> using namespace std; int row, number, i, j; void Calculate(char **str, int a_count[]); void Sort(char **str, int b_count[]); int main() { int *count; char **DNA; cin >> number >> row; count = new int[row]; DNA = new char *[row+1]; for (i = 0; i < row+1; i++) { DNA[i] = new char[number]; count[i] = 0; } for (i = 0; i < row; i++) { cin >> DNA[i]; } Calculate(DNA, count); Sort(DNA, count); for (i = 0; i < row; i++) { cout << DNA[i] << endl; } return 0; } void Calculate( char **str,int a_count[]) { int n ; for (i = 0; i < row; i++) { for (n = 0; n < number; n++) { for (j = n; j < number; j++) { if (str[i][n] > str[i][j]) { a_count[i]++; } } } } } void Sort(char **str,int b_count[]) { int n,temp; n = row; for (i = 0; i < row; i++) { for (j = 0; j < n-1; j++) { if (b_count[j] > b_count[j + 1]) { str[row] = str[j]; str[j] = str[j + 1]; str[j + 1] = str[row]; temp = b_count[j]; b_count[j] = b_count[j + 1]; b_count[j + 1] = temp; } } n--; } }
转载请注明原文地址: https://www.6miu.com/read-2626318.html

最新回复(0)