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

Ευκολη άσκση στην c


nik324

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

migf1 με μια πρωτη ματια που του εριξα με βοηθησε πολυ το "σουλουπωμα" σου ! ;)

Θα τον επεξεργαστω καλυτερα το σκ που θα εχω χρονο.

Εχεις δικιο γι αυτα που λες περι readability του κώδικα :wacko: .Αυτος ο κωδικας ηταν μια δουλεια του ποδαριου,λογω πιεσης χρονου :(

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 99
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Οι 3ς γραμμές.

 

Printf("to maxairi to exei o %d/n", indx);

 

Else{

printf("zwntanos einai o %d", indx);}

 

Δεν νομίζω αφενός ότι είναι τόσο πολύπλοκη όση παρουσιάζεται και αφετέρου ότι οι3ς αυτές γραμμές είναι κάτι το ιδιαίτερο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

>
#include <stdio.h>
#define ISEVEN(n)   	( (n) % 2 == 0 )

int main( void )
{
int n = 0;			/* total number of prisoners   			*/
register int nalive = 0;	/* remaining alive prisoners   			*/
register int i = 1;		/* raw id for current prisoner with knife  	*/
register int curr = i;		/* adjusted id for current prisoner with knife	*/
register int step = 2;		/* adjustable iteration step for the main loop   */

printf("How many prisoners? ");
scanf("%d", &n);

nalive = n;
for(;
{
	printf( "%d has the knife\n", curr );

	if ( i >= n )					/* 2nd cycle? 		*/
		step = 4;				/* ... adjust step  	*/

	nalive -= (step / 2);				/* calc remaining alive */
	if ( nalive < 1 )				/* all dead?        	*/
		break;					/* ... stop the loop	*/

	/* id of prisoner to get the knife (i: raw number, curr: adjusted) 	*/
	i += step;
	curr = i > n ? ( ISEVEN(n) ? i % n : (i % n )-1 ) : i;
}
printf("\nPrisoner %d survived!\n\n", curr);

	return 0;
}

Και για τον φίλο μου timonkaipumpa που του αρέσουν οι... μινιμάλ υλοποιήσεις, 4 γραμμές καθαρού κώδικα :P

 

>
#include <stdio.h>
int main( void )
{
int n, r, i=1,j=i, step=2;	/* r:nalive, j:curr */
scanf("%d", &n);
for(r=n; r>0; step=i>=n?4:2, j=i>n?(n%2==0?i%n:(i%n)-1):i, i+=step, r-=step/2 ) ;
printf("%d\n", j);

	return 0;
}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 χρόνια αργότερα...

Εχω την ιδια ασκηση και εχω κολλησει αρκετα μπορω να πω. Μπορουμε να την λυσουμε ειτε με πινακες ειτε με οχι.

 

Εχω την εντυπωση οτι η ασκηση μας λεει οτι γινονται συνεχεια κυκλοι μεχρι να μεινει καποιος τελευταιος, αυτο κανουν τα παραπανω κομματια κωδικα ή μονο για δευτερο κυκλο;

 

Επισης εχω παρατηρησει οτι ισχυει step = 2^gyros, και εχουμε αγνωστους Ν μελλοθανατους. Εχω κολλησει καθως δεν ξερω τι συνθηκη να βαλω στις εντολες επαναληψεις ή/και πως θα "σκοτωνω" καθε φορα τους μελλοθανατους ωστε να μου μεινει καποιος τελευταιος.

 

Το step = 2^gyros μπορω να το χρησιμοποιησω καπως; Αν ναι πως;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φυσικα αλλα ειμαι σε forum προγραμματισμου, φανταζομαι δεν ειναι δυσκολο για καποιον εμπειρο να διαβασει το 1ο ποστ, το τελευταιο του mig ( ο οποιος ειναι ενεργος απο οσο ξερω εδω μεσα ) και μεσα σε 5 λεπτα να δωσει την χ βοηθεια.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εχω την ιδια ασκηση και εχω κολλησει αρκετα μπορω να πω. Μπορουμε να την λυσουμε ειτε με πινακες ειτε με οχι.

 

Εχω την εντυπωση οτι η ασκηση μας λεει οτι γινονται συνεχεια κυκλοι μεχρι να μεινει καποιος τελευταιος, αυτο κανουν τα παραπανω κομματια κωδικα ή μονο για δευτερο κυκλο;

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

 

Επισης εχω παρατηρησει οτι ισχυει step = 2^gyros, και εχουμε αγνωστους Ν μελλοθανατους. Εχω κολλησει καθως δεν ξερω τι συνθηκη να βαλω στις εντολες επαναληψεις ή/και πως θα "σκοτωνω" καθε φορα τους μελλοθανατους ωστε να μου μεινει καποιος τελευταιος.

 

Το step = 2^gyros μπορω να το χρησιμοποιησω καπως; Αν ναι πως;

Γιατί να υψώσεις σε δύναμη από την στιγμή που μπορείς να το κάνεις με απλό incremental;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...