我需要找出给定的数组是否按降序排序...
我得到了输出,但在门户中它显示为错误答案。
这是我的代码。
#include<stdio.h>
int main()
{
int n,a[15],i,k=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{ scanf("%d",&a[i]);}
for(i=1;i<=n;i++)
{
if(a[i]<a[i+1])
k++;
}
if(k==0)
printf("yes");
else
printf("no");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
帮我想想办法...
数组的索引从0到size - 1。所以如果你有
int array[15];
Run Code Online (Sandbox Code Playgroud)
元素a[0]是a[14]. 但在您的代码中,您从 开始a[1]并a[15]可能尝试访问a[15],这是不安全的内存,会导致问题。
所以你应该首先改变你的 for 循环。
你应该将其更改为
for( i = 0 ; i < n ; i++ )
{
scanf("%d",&a[i]);
}
for( i = 0 ; i < n - 1 ; i++ )
{
if( a[i] < a[i+1] )
{
k++;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在第二个 for 循环中,您应该循环直到,i < n - 1否则,在
if(a[i]<a[i+1])
Run Code Online (Sandbox Code Playgroud)
当 时i = n,您将尝试访问n + 1带有 th 的元素a[i+1],这可能会超出范围。
一旦发现数组不是按降序排列,您也可以退出循环以节省时间。
您还必须确保a[15]足以存储所有值(即作为输入给出的值的数量不应超过 15,请检查问题陈述以确保这一点)