用 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
广告