Δημοσιεύτηκε: 08 Αύγ 2011, 18:49
από konnn
Παρακάτω βρίσκεται τελευταία η έκδοση του κώδικα όπου,φαινομενικά ως τώρα, δεν έχει κάποια προβλήματα.Λειτουργεί ως εξής:
βρίσκει όλα τα ζεύγη και τα τοποθετεί σε ένα πίνακα.Έπειτα αφαιρεί τα διπλότυπα.Άρα, τυπώνει μόλις ολοκληρωθεί ο αλγόριθμος.

Κώδικας: Επιλογή όλων
#include<stdio.h>

int func_sum(int num){
int div=0,sum=0;

for(div=1;div<=num/2;div++){
if((num%div)==0){

sum=sum+div;}

}
// printf("Το άθροισμά των διαιρέτων του %d είναι %d \n" ,num,b );


return sum;
}

int main(){
// int arr[50];
int *p;
int i,j,k,size,n;
//printf("\nEnter size of the array: ");
//scanf("%d",&n);

//printf("\nEnter %d elements into the array: ",n);
//for(i=0;i<n;i++)
// scanf("%d",&arr[i]);
int low=0,high=0,num=0,sum=0,l=0,m=0;

//n=high-low;
printf ("Δώσε το κάτω άκρο του πεδίου αναζήτησης πλην του αριθμού 0 και πατήστε enter :\n");

scanf ("%d",&low);

printf ("Δώσε το άνω άκρο του πεδίου αναζήτησης και πατήστε enter :\n");

scanf ("%d",&high);

if (high<low){
printf ("Δώσε το άνω άκρο του πεδίου αναζήτησης μεγαλύτερο του κάτω και πατήστε enter :\n");

scanf ("%d",&high); }

int arr[high-low];
for(num=low;num<high;num++){

sum=func_sum(num);
/*Τοποθέτηση σε πίνακα των ζευγαριών*/
if(func_sum(sum)==num && sum!=num){

arr[n]=num;
arr[n+1]=sum;
n=n+2;}
}
/*Ξεκαθάριση διπλότυπων*/
size=n;
p=arr;
for(i=0;i<size;i++){//Remove douplicates
for(j=0;j<size;j++){
if(i==j){
continue;
}
else if(*(p+i)==*(p+j)){
k=j;
size--;
while(k < size){
*(p+k)=*(p+k+1);
k++;
}
j=0;
}
}
}
printf("\nThe couples of friend numbers are %d,the: \n",size/2);
for(i=0;i < size;i=i+2){
printf(" %d and %d\n",arr[i],arr[i+1]);
}
return 0;
}