在已排序的数组中打印要搜索的目标元素的索引。如果找不到该元素,则打印应该插入的索引,保持数组排序。
我用C编写了这个程序,但无法理解我哪里出错,它没有按预期工作。
#include<stdio.h>
int main(){
int n,t,i,k=0,l=0;
int arr[50];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
scanf("%d",&t);
// Array size should be less than 50
if(n>50){
printf("Array size exceeded");
return 0;
}
//Check array is sorted and has no duplicates
for(i=0;i<n-1;i++){
if(arr[i] == arr[i+1])
k++;
if(arr[i] > arr[i+1])
l++;
}
if(k!=0){
printf("No duplicates allowed");
return 0;
}
if(l!=0){
printf("Array must be sorted");
return 0;
}
//Find element index or print where it should be inserted
for(i=0;i<n;i++){
if(arr[i] == t){
printf("%d",i);
return 0;
}
if(arr[i] > t){
printf("%d",i);
return 0;
}
else{
printf("%d",n+1);
return 0;
}
}
}
答案 0 :(得分:1)
我认为您的问题是您在最后一次循环后始终打印并返回。我不能确定,因为我不知道你给出了哪个输入,你得到的输出和预期的输出
尝试更改
//Find element index or print where it should be inserted
for(i=0;i<n;i++){
if(arr[i] == t){
printf("%d",i);
return 0;
}
if(arr[i] > t){
printf("%d",i);
return 0;
}
else{
printf("%d",n+1);
return 0;
}
}
要
//Find element index or print where it should be inserted
for(i=0;i<n;i++){
if(arr[i] == t){
printf("%d",i);
return 0;
}
if(arr[i] > t){
printf("%d",i);
return 0;
}
}
printf("%d",n+1);
return 0;
这样做的原因是,如果数组中的第一个元素小于t,则无论其他元素如何,都将打印n + 1。
此外,您可能希望在其他所有内容之后打印新的行字符,因此将\n
添加到第一个参数的末尾。
答案 1 :(得分:0)
上一循环的else语句中的逻辑问题。
纠正代码 -
#include<stdio.h>
int main(){
int n,t,i,k=0,l=0;
int arr[50];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
scanf("%d",&t);
// Array size should be less than 50
if(n>50||n<=0){
printf("Array size exceeded");
return 0;
}
//Check array is sorted and has no duplicates
for(i=0;i<n-1;i++){
if(arr[i] == arr[i+1])
k++;
if(arr[i] > arr[i+1])
l++;
}
if(k!=0){
printf("No duplicates allowed");
return 0;
}
if(l!=0){
printf("Array must be sorted");
return 0;
}
//Find element index or print where it should be inserted
for(i=0;i<n;i++){
if(arr[i] == t){
printf("%d",i);
return 0;
}
if(arr[i] > t){
printf("%d",i);
return 0;
}
else{
printf("%d",i+1);
return 0;
}
}
}
建议 - 对已排序的数组使用二进制搜索。