作为我必须编写的程序的一部分,我需要编程的函数之一应检查数组是否具有相同的相同数字,并且如果其中一个更大/等于给定数字
给定的数字也是数组中的数字量
这是我到目前为止所做的:
int checkarray(int *arr, int num)
{
int check = num;
int check2 = num;
int *lor;
int *poi;
int *another;
another = arr;
lor = arr;
poi = arr;
int check3 = num;
for ( ; num > 1; num--) {
for ( ; check3 >= 0; check3--) {
if (*arr == *poi)
return 0;
poi++;
}
arr++;
poi = another;
}
for ( ; check2 > 0; check2--) {
if (*lor >= check)
return 0;
lor++;
}
return 1;
}
我知道我为函数制作了太多的指针/ int,但这不是问题..
检查给定值的部分可以正常工作,如果我没有弄错,所以我认为你可以忽略那部分(那是最后'for'循环)
我知道它应该很容易,但由于某些原因我无法让它工作......
编辑:
我举一个例子:如果数组是0 1 2 3 1,该函数将返回0,因为第二个和最后一个数字是相同的。如果给定的数字是5,则该函数也将返回0,其中一个数字大于或等于5,例如0 1 2 5 4。
否则,该函数返回1.
答案 0 :(得分:2)
我创建了一个新数组,我将保存数字,以便检查数组中是否有重复数字。我在函数中还有一个参数来知道数组的大小。
#include <stdio.h>
#include <stdlib.h>
int checkArray(int *arr, int size, int number){
int i,j;
int *countArray = calloc(size,sizeof(int));
for(i=0;i<size;i++){
if(arr[i]>=number){ //Check >= number
free(countArray);
return 0;
}
for(j=0;j<i;j++){ //Check repeat number
if(countArray[j]==arr[i]){
free(countArray);
return 0;
}
}
countArray[j]=arr[i]; //no repeat number so we save it.
}
free(countArray);
return -1; //Error
}
int main(){
int arr[6] = {0,8,2,3,4,1};
printf("Result %d",checkArray(arr,6,5));
}
我希望这可以帮到你。
int checkArray(int *arr, int size, int number){
int i,j;
for(i=0;i<size;i++){
if(arr[i]>=number){
return 0;
}
for(j=0;j<i;j++){
if(arr[i]==arr[j]){
return 0;
}
}
}
return -1; //Error
}
答案 1 :(得分:1)
将您的上限for循环更改为:
for ( ; num > 0; num--) {
if(arr[i]>=number){
return 0;
}
int check3 = num;
poi=arr+1;
for ( ; check3 > 0; check3--) {
if (*arr == *poi)
return 0;
poi++;
}
arr++;
}
并删除底部。
答案 2 :(得分:0)
这里的错误如下:
1-您需要更改行:
int check3 = num;
for ( ; num > 1; num--) {
是:
for ( ; num > 1; num --) {
int check3 = check; // Move to inside loop to reset each time for a fresh inner loop and use check instead of num to reset the value
2-你需要更改一行:
for ( ; check3 >= 0; check3--) {
要
for ( ; check3 > 0; check3--) { // Because `>=0` means attempting to read past the array
3- poi
应该在循环中每次初始化为arr+1
,以跳过将数组的相同成员与自身进行比较,并跳过多次重新比较成员。
我建议使用更好的代码样式重写该方法,以便更容易检测到此类错误和拼写错误