【发布时间】:2022-01-14 16:25:22
【问题描述】:
例如,给定一个方阵,找出正在增长的子字符串的长度。
matrix | result because of
5 |
1 2 3 4 5 |
2 5 2 5 9 |
7 8 9 0 1 --> 5 --> 1 2 3 4 5
0 0 0 0 0 |
2 3 6 1 2 |
我尝试将a[i][j] 与a[i][j+1] 进行比较并增加计数器,但我认为我的问题是当程序在最终元素上并且它不增加计数器时。
这里有我的代码:
int main(){
int n;
scanf("%d",&n);
int i,j,a[n][n];
for(i = 0;i < n;i++){
for(j = 0;j <n;j++){
scanf("%d",&a[i][j]);
}
}
int max=-9999;
int counter;
for(i = 0;i < n;i++){
counter=0;
for(j = 0;j <n;j++){
if(a[i][j]<a[i][j+1]){
counter++;
}
if(counter>max){
max = counter;
}
}
}
printf("%d",max);
return 0;
}
【问题讨论】:
-
当
j达到最大值时(n - 1),表达式a[i][j+1]调用Undefined Behaviour,因为元素a[i][n]不存在(a[i]从索引0到n - 1)。 -
它是方阵有什么意义?它可以“展平”为一个简单的一维数组。
-
@EugeneSh。这是作业问题,它特别告诉我们应该使用矩阵
-
最长增长的子串可以跨越多行吗?它总是在水平方向吗?这个问题似乎没有明确说明。
-
@ggolen 只是水平的并排成一行
标签: c algorithm for-loop matrix max