矩阵中增长子串的长度
Length of a growing substring in matrix
给定一个方阵,求出正在增长的子字符串的长度。
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;
}
对于初学者来说,由于索引的范围不能为负,因此将变量 max 声明为负值是没有意义的
int max=-9999;
至少可以这样初始化
int max = 0;
在这个 if 语句中
if(a[i][j]<a[i][j+1]){
由于表达式 a[i][j+1]
.[=19=,当 i
和 j
等于 n - 1
时,可以访问超出分配数组的内存]
还有这个if语句
if(counter>max){
max = counter;
}
应该移到内部 if 语句之外。
并且变量 count 应该在外循环中声明
您可以按以下方式重写内部 for 循环
int counter=1;
for(j = 1;j <n;j++){
if(a[i][j-1]<a[i][j]){
counter++;
}
}
if(counter>max){
max = counter;
}
给定一个方阵,求出正在增长的子字符串的长度。
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;
}
对于初学者来说,由于索引的范围不能为负,因此将变量 max 声明为负值是没有意义的
int max=-9999;
至少可以这样初始化
int max = 0;
在这个 if 语句中
if(a[i][j]<a[i][j+1]){
由于表达式 a[i][j+1]
.[=19=,当 i
和 j
等于 n - 1
时,可以访问超出分配数组的内存]
还有这个if语句
if(counter>max){
max = counter;
}
应该移到内部 if 语句之外。
并且变量 count 应该在外循环中声明
您可以按以下方式重写内部 for 循环
int counter=1;
for(j = 1;j <n;j++){
if(a[i][j-1]<a[i][j]){
counter++;
}
}
if(counter>max){
max = counter;
}