用 C++ 统计未按升序排序的列数


给定一个字符串数组,每个字符串长度相同。目标是找到未按升序排序的列(字符串矩阵)。例如,比较每个字符串的第一个字符与下一个字符串的第一个字符,以此类推,直到最后一个字符串。如果它们不是按升序排列的,则增加计数。对所有第二个字符、所有字符串的第三个字符,依此类推,直到最后一个字符,都执行此操作。

输入

Arr[]= { “abc”, “bcd”, “def” }

输出

Count of columns: 0

解释 - 对于每一列:

第 1 列:索引 0 处的字符:a<b<d

第 2 列:索引 1 处的字符:b<c<e

第 3 列:索引 2 处的字符:c<d<f

列中所有对应的字符都按升序排序。

输入

Arr[]= { “dbd”, “faf”, “eeg” }

输出

Count of columns: 2

解释 - 对于每一列:

第 1 列 - 索引 0 处的字符:d<f>g

第 2 列 - 索引 1 处的字符:b>a<e

第 3 列 - 索引 2 处的字符:d<f<g

第 1 列和第 2 列的字符未按升序排列。计数=2

下面程序中使用的方案如下

  • 字符数组 arr[][] 用于存储相同长度的字符串。

  • 函数 countCols(char str[3][4],int n,int len) 以字符串数组、其中的字符串数和每个字符串的长度作为输入,并返回未按升序排列的列数。

  • 将 count 初始化为 0。

  • Col 用于表示当前列。(所有字符串的公共索引)。

  • 使用 for 循环同时遍历每个字符串,从第一个索引开始,直到字符串的长度(所有字符串的长度相同)。

  • 这里每个字符串有 3 个字符,所以我们比较 str[col][j]>str[col+1][j-1] || str[col+1][j]>str[col+2][j-1]。如果任何条件为真,则增加计数。

  • 在 for 循环结束之后,返回 count 中的结果。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int countCols(char str[3][4],int n,int len){
    int i,j;
   int count=0;
   int col=0;
   for(j=0;j<len;j++){
      if(str[col][j]>str[col+1][j-1] || str[col+1][j]>str[col+2][j-1] )
         count++;
   }
   return count;
}
int main(){
   char arr[3][4]={"abc", "daf", "ghi"};
   cout<<"\nColumns that are not sorted:"<<countCols(arr,3,3);
   return 0;
}

输出

Columns that are not sorted:2

更新于: 2020-07-28

201 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告