Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω το εξής προβληματάκι ,το πρόβλημα ζητά σε ένα ερώτημα να Τυπώνει τον αριθμό που έχει τις περισσότερες εμφανίσεις. Σε περίπτωση ισοπαλίας πρέπει να τυπώνει όλους τους αριθμούς με τις περισσότερες εμφανίσεις ,για κάποιο λόγο όμως δεν μου εμφανίζει τον αριθμό που είναι σε ισοπαλία με τον MAX 

//Lab 3 Exercise 1

#include <stdio.h>
#include <stdlib.h>

//Constants decleration
#define N 20
#define C 10
 
int main ()
  {
  	
  int numbers[N],counters[C],max[C],i,j,MAX,k,l,p; 
   counters[0]=MAX;
   
//Zerowing the counters panel  
  for (l=0; l<C; l=l+1)
    counters[l]=0;
  
//Input of the numbers
  for (i=0; i<N; i=i+1)
  {
   printf("Give me an integer\n");
   scanf("%d",&numbers[i]);
   
//Invalid number check    
   if ((numbers[i]<1) || (numbers[i]>10))
    { 
   	printf("Invalid number,please give me an integer again\n");
   	scanf("%d",&numbers[i]);
    }
    
//How many times a number appears check   
   	if (i == numbers[i])
   	    counters[(numbers[i])]+=1;
   	 else if (i != numbers[i]) 
   	  {
   	    j=numbers[i];
   	    counters[j]=counters[j]+1;
      } 
      	                   
   }
   
   
   
//How many times a number appears (in screen visual)
   for (k=1; k<=C; k++)
   {   	
   	if(counters[k]<=20)
      printf("how many times %d appears: %d  \n",k,counters[k]);
     
      
//For Max displayed number 
	 if (counters[k]>MAX)
       MAX=k;   
    }
    
    printf("The number that appears the most is %d\n",MAX);
    
//In case that a number equals to MAX    
   for (p=0; p<C; p++)
      {
     max[p]=counters[p]; 
	 	
	  if (MAX==max[p]) 
      printf("also %d\n",p);
      }
     
   
   system("PAUSE");
   return 0;
   }
Δημοσ.
int numbers[N],counters[C],max[C],i,j,MAX,k,l,p;
counters[0]=MAX;

Το MAX δεν είχε ακόμα κάποια συγκεκριμένη τιμή, άρα και το counters[0] θα πάθει το ίδιο πράγμα. Πρέπει να τους δώσεις κάποια αρχική τιμή, αλλιώς συγκρίνεις όλα τα υπόλοιπα με κάποιον τυχαίο αριθμό που υπήρχε στη μνήμη εκείνη τη στιγμή...

Δημοσ.
int numbers[N],counters[C],max[C],i,j,MAX,k,l,p;
counters[0]=MAX;

Το MAX δεν είχε ακόμα κάποια συγκεκριμένη τιμή, άρα και το counters[0] θα πάθει το ίδιο πράγμα. Πρέπει να τους δώσεις κάποια αρχική τιμή, αλλιώς συγκρίνεις όλα τα υπόλοιπα με κάποιον τυχαίο αριθμό που υπήρχε στη μνήμη εκείνη τη στιγμή...

 

το άλλαξα ,αυτό που δεν καταλαβαίνω ειναι γιατί δεν δουλεύει το 

for (p=0; p<C; p++)
      {
     max[p]=counters[p]; 
	 	
	  if (MAX==max[p]) 
      printf("also %d\n",p);
      }
Δημοσ.

Δε δουλεύει επειδή δε βρίσκεις το MAX σωστά. Πρέπει να κάνεις "if (counters[k]>counters[MAX])", εφόσον αποθηκεύεις τη θέση στον πίνακα και όχι την ίδια τη τιμή.

Δημοσ.

Δε δουλεύει επειδή δε βρίσκεις το MAX σωστά. Πρέπει να κάνεις "if (counters[k]>counters[MAX])", εφόσον αποθηκεύεις τη θέση στον πίνακα και όχι την ίδια τη τιμή.

Ευχαριστώ πολύ για την βοήθεια,βγήκε μόλις το άλλαξα

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...